aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk/client.c
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2011-10-13 11:23:25 -0500
committerTed Gould <ted@gould.cx>2011-10-13 11:23:25 -0500
commit662b22342e62004fae0fb20ac26a315122798ffa (patch)
treee9fac1fd45627e64ed323c45b266e13b44a288bf /libdbusmenu-gtk/client.c
parent788e779f219aa64a281de3e3903072d151e3baa8 (diff)
parentf966667e6e1af74f06c65d8cfca78d0b861d5621 (diff)
downloadlibdbusmenu-662b22342e62004fae0fb20ac26a315122798ffa.tar.gz
libdbusmenu-662b22342e62004fae0fb20ac26a315122798ffa.tar.bz2
libdbusmenu-662b22342e62004fae0fb20ac26a315122798ffa.zip
* New upstream release.
* Allow for an ID of 0 in about_to_show for indicators (LP: #862989) * Clear the image pointer when we take it * Ensure we drop all references to the GTK widget when a menuitem gets destroyed (LP: #835646)
Diffstat (limited to 'libdbusmenu-gtk/client.c')
-rw-r--r--libdbusmenu-gtk/client.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c
index 1051f20..38b6a75 100644
--- a/libdbusmenu-gtk/client.c
+++ b/libdbusmenu-gtk/client.c
@@ -823,14 +823,22 @@ item_activate (DbusmenuClient * client, DbusmenuMenuitem * mi, guint timestamp,
return;
}
-#ifdef MASSIVEDEBUGGING
static void
-destroy_gmi (GtkMenuItem * gmi, DbusmenuMenuitem * mi)
+destroy_gmi (GtkMenuItem * gmi)
{
- g_debug("Destorying GTK Menuitem for %d", dbusmenu_menuitem_get_id(mi));
+#ifdef MASSIVEDEBUGGING
+ g_debug("Destroying GTK Menuitem %d", gmi);
+#endif
+
+ /* Call gtk_widget_destroy to remove from any containers and cleanup */
+ gtk_widget_destroy(GTK_WIDGET(gmi));
+
+ /* Now remove last ref that we are holding (due to g_object_ref_sink in
+ dbusmenu_gtkclient_newitem_base). This should finalize the object */
+ g_object_unref(G_OBJECT(gmi));
+
return;
}
-#endif
/**
* dbusmenu_gtkclient_newitem_base:
@@ -857,7 +865,7 @@ dbusmenu_gtkclient_newitem_base (DbusmenuGtkClient * client, DbusmenuMenuitem *
/* Attach these two */
g_object_ref_sink(G_OBJECT(gmi));
- g_object_set_data_full(G_OBJECT(item), data_menuitem, gmi, (GDestroyNotify)gtk_widget_destroy);
+ g_object_set_data_full(G_OBJECT(item), data_menuitem, gmi, (GDestroyNotify)destroy_gmi);
/* DbusmenuMenuitem signals */
g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_prop_change_cb), client);