PROP_CENTER_WIDGET,
PROP_END_WIDGET,
PROP_BASELINE_POSITION,
+ PROP_SHRINK_CENTER_LAST,
/* orientable */
PROP_ORIENTATION,
}
break;
- case PROP_START_WIDGET:
- gtk_center_box_set_start_widget (self, GTK_WIDGET (g_value_get_object (value)));
- break;
+ case PROP_START_WIDGET:
+ gtk_center_box_set_start_widget (self, GTK_WIDGET (g_value_get_object (value)));
+ break;
- case PROP_CENTER_WIDGET:
- gtk_center_box_set_center_widget (self, GTK_WIDGET (g_value_get_object (value)));
- break;
+ case PROP_CENTER_WIDGET:
+ gtk_center_box_set_center_widget (self, GTK_WIDGET (g_value_get_object (value)));
+ break;
- case PROP_END_WIDGET:
- gtk_center_box_set_end_widget (self, GTK_WIDGET (g_value_get_object (value)));
- break;
+ case PROP_END_WIDGET:
+ gtk_center_box_set_end_widget (self, GTK_WIDGET (g_value_get_object (value)));
+ break;
+
+ case PROP_SHRINK_CENTER_LAST:
+ gtk_center_box_set_shrink_center_last (self, g_value_get_boolean (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
g_value_set_object (value, self->end_widget);
break;
+ case PROP_SHRINK_CENTER_LAST:
+ g_value_set_boolean (value, gtk_center_layout_get_shrink_center_last (GTK_CENTER_LAYOUT (layout)));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
GTK_TYPE_WIDGET,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
+ /**
+ * GtkCenterBox:shrink-center-last: (attributes org.gtk.Property.get=gtk_center_box_get_shrink_center_last org.gtk.Property.set=gtk_center_box_set_shrink_center_last)
+ *
+ * Whether to shrink the center widget after other children.
+ *
+ * By default, when there's no space to give all three children their
+ * natural widths, the start and end widgets start shrinking and the
+ * center child keeps natural width until they reach minimum width.
+ *
+ * If set to `TRUE`, start and end widgets keep natural width and the
+ * center widget starts shrinking instead.
+ *
+ * Since: 4.12
+ */
+ props[PROP_SHRINK_CENTER_LAST] =
+ g_param_spec_boolean ("shrink-center-last", NULL, NULL,
+ FALSE,
+ GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
+
g_object_class_install_properties (object_class, LAST_PROP, props);
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_CENTER_LAYOUT);
return gtk_center_layout_get_baseline_position (GTK_CENTER_LAYOUT (layout));
}
+/**
+ * gtk_center_box_set_shrink_center_last: (attributes org.gtk.Method.set_property=shrink-center-last)
+ * @self: a `GtkCenterBox`
+ * @shrink_center_last: whether to shrink the center widget after others
+ *
+ * Sets whether to shrink the center widget after other children.
+ *
+ * By default, when there's no space to give all three children their
+ * natural widths, the start and end widgets start shrinking and the
+ * center child keeps natural width until they reach minimum width.
+ *
+ * If set to `TRUE`, start and end widgets keep natural width and the
+ * center widget starts shrinking instead.
+ *
+ * Since: 4.12
+ */
+void
+gtk_center_box_set_shrink_center_last (GtkCenterBox *self,
+ gboolean shrink_center_last)
+{
+ GtkLayoutManager *layout;
+ gboolean current_shrink_center_last;
+
+ g_return_if_fail (GTK_IS_CENTER_BOX (self));
+
+ shrink_center_last = !!shrink_center_last;
+
+ layout = gtk_widget_get_layout_manager (GTK_WIDGET (self));
+ current_shrink_center_last = gtk_center_layout_get_shrink_center_last (GTK_CENTER_LAYOUT (layout));
+ if (current_shrink_center_last != shrink_center_last)
+ {
+ gtk_center_layout_set_shrink_center_last (GTK_CENTER_LAYOUT (layout), shrink_center_last);
+ g_object_notify_by_pspec (G_OBJECT (self), props[PROP_SHRINK_CENTER_LAST]);
+ gtk_widget_queue_allocate (GTK_WIDGET (self));
+ }
+}
+
+/**
+ * gtk_center_box_get_shrink_center_last: (attributes org.gtk.Method.get_property=shrink-center-last)
+ * @self: a `GtkCenterBox`
+ *
+ * Gets whether @self shrinks the center widget after other children.
+ *
+ * Returns: whether to shrink the center widget after others
+ *
+ * Since: 4.12
+ */
+gboolean
+gtk_center_box_get_shrink_center_last (GtkCenterBox *self)
+{
+ GtkLayoutManager *layout;
+
+ g_return_val_if_fail (GTK_IS_CENTER_BOX (self), FALSE);
+
+ layout = gtk_widget_get_layout_manager (GTK_WIDGET (self));
+
+ return gtk_center_layout_get_shrink_center_last (GTK_CENTER_LAYOUT (layout));
+}