aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk
diff options
context:
space:
mode:
Diffstat (limited to 'libdbusmenu-gtk')
-rw-r--r--libdbusmenu-gtk/client.c14
-rw-r--r--libdbusmenu-gtk/menu.c14
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;
}