diff --git a/gtk/gtkstack.c b/gtk/gtkstack.c index b97ebb54bb..e1a24b7763 100644 --- a/gtk/gtkstack.c +++ b/gtk/gtkstack.c @@ -1467,16 +1467,12 @@ stack_remove (GtkStack *stack, if (child_info == NULL) return; - priv->children = g_list_remove (priv->children, child_info); - g_signal_handlers_disconnect_by_func (child, stack_child_visibility_notify_cb, stack); was_visible = gtk_widget_get_visible (child); - g_clear_object (&child_info->widget); - if (priv->visible_child == child_info) { if (in_dispose) @@ -1490,6 +1486,10 @@ stack_remove (GtkStack *stack, gtk_widget_unparent (child); + g_clear_object (&child_info->widget); + + priv->children = g_list_remove (priv->children, child_info); + g_object_unref (child_info); if (!in_dispose &&