summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-09-20 01:22:21 -0400
committerMatthias Clasen <mclasen@redhat.com>2015-09-23 07:01:16 -0400
commitda45d29dbcad003a6c8435c0790a4ca61b953269 (patch)
tree25802c2aa1fc3b07426791ff5361af54936172e2
parentcd35a14bbb724baf1fa07b124abb05e4bd6ce69e (diff)
downloadgtk+-da45d29dbcad003a6c8435c0790a4ca61b953269.tar.gz
size group: Streamline disposal
Remove widgets from their size groups in dispose, without connecting to ::destroy. The signal handler is not necessary.
-rw-r--r--gtk/gtksizegroup.c19
-rw-r--r--gtk/gtkwidget.c11
2 files changed, 13 insertions, 17 deletions
diff --git a/gtk/gtksizegroup.c b/gtk/gtksizegroup.c
index db3de650fa..8e1e33f90b 100644
--- a/gtk/gtksizegroup.c
+++ b/gtk/gtksizegroup.c
@@ -518,13 +518,6 @@ gtk_size_group_get_ignore_hidden (GtkSizeGroup *size_group)
return size_group->priv->ignore_hidden;
}
-static void
-gtk_size_group_widget_destroyed (GtkWidget *widget,
- GtkSizeGroup *size_group)
-{
- gtk_size_group_remove_widget (size_group, widget);
-}
-
/**
* gtk_size_group_add_widget:
* @size_group: a #GtkSizeGroup
@@ -540,8 +533,8 @@ gtk_size_group_widget_destroyed (GtkWidget *widget,
* be removed from the size group.
*/
void
-gtk_size_group_add_widget (GtkSizeGroup *size_group,
- GtkWidget *widget)
+gtk_size_group_add_widget (GtkSizeGroup *size_group,
+ GtkWidget *widget)
{
GtkSizeGroupPrivate *priv;
GSList *groups;
@@ -559,10 +552,6 @@ gtk_size_group_add_widget (GtkSizeGroup *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);
}
@@ -589,10 +578,6 @@ gtk_size_group_remove_widget (GtkSizeGroup *size_group,
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);
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 8dd39ce5ac..a97cd76ef1 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -11999,6 +11999,7 @@ gtk_widget_dispose (GObject *object)
{
GtkWidget *widget = GTK_WIDGET (object);
GtkWidgetPrivate *priv = widget->priv;
+ GSList *sizegroups;
if (priv->parent)
gtk_container_remove (GTK_CONTAINER (priv->parent), widget);
@@ -12016,6 +12017,16 @@ gtk_widget_dispose (GObject *object)
priv->in_destruction = FALSE;
}
+ sizegroups = _gtk_widget_get_sizegroups (widget);
+ while (sizegroups)
+ {
+ GtkSizeGroup *size_group;
+
+ size_group = sizegroups->data;
+ sizegroups = sizegroups->next;
+ gtk_size_group_remove_widget (size_group, widget);
+ }
+
g_object_set_qdata (object, quark_action_muxer, NULL);
while (priv->attached_windows)