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
This commit is contained in:
Colin Walters 2011-08-25 14:50:30 -04:00
parent b5577781d1
commit 06307dd774

View File

@ -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);