diff options
Diffstat (limited to 'libdbusmenu-gtk')
-rw-r--r-- | libdbusmenu-gtk/client.c | 14 | ||||
-rw-r--r-- | libdbusmenu-gtk/menu.c | 14 |
2 files changed, 24 insertions, 4 deletions
diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 98f1cb2..3de42fe 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -109,10 +109,16 @@ static const gchar * data_menu = "dbusmenugtk-data-gtkmenu"; static gboolean menu_pressed_cb (GtkMenuItem * gmi, DbusmenuMenuitem * mi) { - GValue value = {0}; - g_value_init(&value, G_TYPE_INT); - g_value_set_int(&value, 0); - dbusmenu_menuitem_handle_event(mi, "clicked", &value, gtk_get_current_event_time()); + if (gtk_menu_item_get_submenu(gmi) == NULL) { + GValue value = {0}; + g_value_init(&value, G_TYPE_INT); + g_value_set_int(&value, 0); + dbusmenu_menuitem_handle_event(mi, "clicked", &value, gtk_get_current_event_time()); + } else { + /* TODO: We need to stop the display of the submenu + until this callback returns. */ + dbusmenu_menuitem_send_about_to_show(mi, NULL, NULL); + } return TRUE; } diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index d2a8620..103ecfe 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -96,6 +96,18 @@ dbusmenu_gtkmenu_class_init (DbusmenuGtkMenuClass *klass) } static void +menu_focus_cb(DbusmenuGtkMenu * menu, gpointer userdata) +{ + DbusmenuGtkMenuPrivate * priv = DBUSMENU_GTKMENU_GET_PRIVATE(menu); + if (priv->client != NULL) { + /* TODO: We should stop the display of the menu + until the about to show call returns. */ + dbusmenu_client_send_about_to_show(DBUSMENU_CLIENT(priv->client), 0, NULL, NULL); + } + return; +} + +static void dbusmenu_gtkmenu_init (DbusmenuGtkMenu *self) { DbusmenuGtkMenuPrivate * priv = DBUSMENU_GTKMENU_GET_PRIVATE(self); @@ -105,6 +117,8 @@ dbusmenu_gtkmenu_init (DbusmenuGtkMenu *self) priv->dbus_object = NULL; priv->dbus_name = NULL; + g_signal_connect(G_OBJECT(self), "focus", G_CALLBACK(menu_focus_cb), self); + return; } |