diff options
author | Ted Gould <ted@gould.cx> | 2011-10-13 11:23:25 -0500 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2011-10-13 11:23:25 -0500 |
commit | 662b22342e62004fae0fb20ac26a315122798ffa (patch) | |
tree | e9fac1fd45627e64ed323c45b266e13b44a288bf /libdbusmenu-gtk/client.c | |
parent | 788e779f219aa64a281de3e3903072d151e3baa8 (diff) | |
parent | f966667e6e1af74f06c65d8cfca78d0b861d5621 (diff) | |
download | libdbusmenu-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.c | 18 |
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); |