From 06307dd774da77a2d74f5529feee2ca120804e2f Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Thu, 25 Aug 2011 14:50:30 -0400 Subject: [PATCH] GtkAction: Hold a reference to proxy widgets Previously we expect that a proxy widget holds a reference to the action via gtk_activatable_do_set_related_action(). However, it is possible for the widget to still be in a floating state when it adds itself to the the action. This is a problem when gtk_action_get_proxies() gets called, because we return floating objects back to the user. And language bindings aren't going to be expecting that. Fix this by calling ref_sink() and unref(). https://bugzilla.gnome.org/show_bug.cgi?id=657367 --- gtk/gtkaction.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gtk/gtkaction.c b/gtk/gtkaction.c index ad69d4f16..c24ee7859 100644 --- a/gtk/gtkaction.c +++ b/gtk/gtkaction.c @@ -716,6 +716,7 @@ static void remove_proxy (GtkAction *action, GtkWidget *proxy) { + g_object_unref (proxy); action->private_data->proxies = g_slist_remove (action->private_data->proxies, proxy); } @@ -725,6 +726,8 @@ connect_proxy (GtkAction *action, { action->private_data->proxies = g_slist_prepend (action->private_data->proxies, proxy); + g_object_ref_sink (proxy); + if (action->private_data->action_group) _gtk_action_group_emit_connect_proxy (action->private_data->action_group, action, proxy); -- 2.43.2