/** * gtk_size_group_remove_widget: * @size_group: a #GtkSizeGroup * @widget: the #GtkWidget to remove * * Removes a widget from a #GtkSizeGroup. **/ void gtk_size_group_remove_widget (GtkSizeGroup *size_group, GtkWidget *widget) { GtkSizeGroupPrivate *priv; g_return_if_fail (GTK_IS_SIZE_GROUP (size_group)); g_return_if_fail (GTK_IS_WIDGET (widget)); priv = size_group->priv; g_return_if_fail (g_slist_find (priv->widgets, widget)); g_signal_handlers_disconnect_by_func (widget, gtk_size_group_widget_destroyed, size_group); _gtk_widget_remove_sizegroup (widget, size_group); priv->widgets = g_slist_remove (priv->widgets, widget); queue_resize_on_group (size_group); gtk_widget_queue_resize (widget); g_object_unref (size_group); }
/** * gtk_size_group_add_widget: * @size_group: a #GtkSizeGroup * @widget: the #GtkWidget to add * * Adds a widget to a #GtkSizeGroup. In the future, the requisition * of the widget will be determined as the maximum of its requisition * and the requisition of the other widgets in the size group. * Whether this applies horizontally, vertically, or in both directions * depends on the mode of the size group. See gtk_size_group_set_mode(). * * When the widget is destroyed or no longer referenced elsewhere, it will * be removed from the size group. */ void gtk_size_group_add_widget (GtkSizeGroup *size_group, GtkWidget *widget) { GtkSizeGroupPrivate *priv; GSList *groups; g_return_if_fail (GTK_IS_SIZE_GROUP (size_group)); g_return_if_fail (GTK_IS_WIDGET (widget)); priv = size_group->priv; groups = _gtk_widget_get_sizegroups (widget); if (!g_slist_find (groups, size_group)) { _gtk_widget_add_sizegroup (widget, size_group); priv->widgets = g_slist_prepend (priv->widgets, widget); g_signal_connect (widget, "destroy", G_CALLBACK (gtk_size_group_widget_destroyed), size_group); g_object_ref (size_group); } queue_resize_on_group (size_group); }
/** * gtk_size_group_set_mode: * @size_group: a #GtkSizeGroup * @mode: the mode to set for the size group. * * Sets the #GtkSizeGroupMode of the size group. The mode of the size * group determines whether the widgets in the size group should * all have the same horizontal requisition (%GTK_SIZE_GROUP_MODE_HORIZONTAL) * all have the same vertical requisition (%GTK_SIZE_GROUP_MODE_VERTICAL), * or should all have the same requisition in both directions * (%GTK_SIZE_GROUP_MODE_BOTH). **/ void gtk_size_group_set_mode (GtkSizeGroup *size_group, GtkSizeGroupMode mode) { g_return_if_fail (GTK_IS_SIZE_GROUP (size_group)); if (size_group->mode != mode) { if (size_group->mode != GTK_SIZE_GROUP_NONE) queue_resize_on_group (size_group); size_group->mode = mode; if (size_group->mode != GTK_SIZE_GROUP_NONE) queue_resize_on_group (size_group); g_object_notify (G_OBJECT (size_group), "mode"); } }
/** * gtk_size_group_remove_widget: * @size_group: a #GtkSizeGrup * @widget: the #GtkWidget to remove * * Removes a widget from a #GtkSizeGroup. **/ void gtk_size_group_remove_widget (GtkSizeGroup *size_group, GtkWidget *widget) { GSList *groups; g_return_if_fail (GTK_IS_SIZE_GROUP (size_group)); g_return_if_fail (GTK_IS_WIDGET (widget)); g_return_if_fail (g_slist_find (size_group->widgets, widget)); g_signal_handlers_disconnect_by_func (widget, gtk_size_group_widget_destroyed, size_group); groups = get_size_groups (widget); groups = g_slist_remove (groups, size_group); set_size_groups (widget, groups); size_group->widgets = g_slist_remove (size_group->widgets, widget); queue_resize_on_group (size_group); gtk_widget_queue_resize (widget); g_object_unref (size_group); }