diff options
author | Ted Gould <ted@gould.cx> | 2011-03-16 09:52:27 -0500 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2011-03-16 09:52:27 -0500 |
commit | 7b45ed929b6c83335034ee9e3b98cf6dd7891b7a (patch) | |
tree | d2bf39ed2d775e44aaaa67df6fd9df51b6c18354 | |
parent | aa6374dffb6edb3d1e12a9358277a7f4a8bb31ed (diff) | |
parent | 05cb2ccd4c7c27721171eb634fcbcf560e4c6efa (diff) | |
download | libdbusmenu-7b45ed929b6c83335034ee9e3b98cf6dd7891b7a.tar.gz libdbusmenu-7b45ed929b6c83335034ee9e3b98cf6dd7891b7a.tar.bz2 libdbusmenu-7b45ed929b6c83335034ee9e3b98cf6dd7891b7a.zip |
Send open and close signals when menu visibility changes.
-rw-r--r-- | libdbusmenu-gtk/client.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 510e74e..f9de880 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -467,6 +467,15 @@ menu_pressed_cb (GtkMenuItem * gmi, DbusmenuMenuitem * mi) return TRUE; } +static void +submenu_notify_visible_cb (GtkWidget * menu, GParamSpec * pspec, DbusmenuMenuitem * mi) +{ + if (gtk_widget_get_visible (menu)) + dbusmenu_menuitem_handle_event(mi, "opened", NULL, gtk_get_current_event_time()); + else + dbusmenu_menuitem_handle_event(mi, "closed", NULL, gtk_get_current_event_time()); +} + /* Process the visible property */ static void process_visible (DbusmenuMenuitem * mi, GtkMenuItem * gmi, GVariant * value) @@ -740,11 +749,12 @@ new_child (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint position, Dbus GtkMenuItem * parent = dbusmenu_gtkclient_menuitem_get(gtkclient, mi); gtk_menu_item_set_submenu(parent, GTK_WIDGET(menu)); + + g_signal_connect(menu, "notify::visible", G_CALLBACK(submenu_notify_visible_cb), mi); } GtkMenuItem * childmi = dbusmenu_gtkclient_menuitem_get(gtkclient, child); gtk_menu_shell_insert(GTK_MENU_SHELL(menu), GTK_WIDGET(childmi), position); - gtk_widget_show(GTK_WIDGET(menu)); return; } |