[gtk+] GtkAction: Hold a reference to proxy widgets



commit 06307dd774da77a2d74f5529feee2ca120804e2f
Author: Colin Walters <walters verbum org>
Date:   Thu Aug 25 14:50:30 2011 -0400

    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 files changed, 3 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkaction.c b/gtk/gtkaction.c
index ad69d4f..c24ee78 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);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]