From 761cd05f56dd236e787ce7da56740b7e0c6ae399 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Wed, 3 Mar 2010 12:29:28 +0100 Subject: Started to implement about-to-show support --- libdbusmenu-gtk/client.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 781326e..77d971e 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -116,6 +116,14 @@ menu_pressed_cb (GtkMenuItem * gmi, DbusmenuMenuitem * mi) return TRUE; } +/* This is called when submenu gm of menuitem mi gets shown. */ +static gboolean +menu_shown_cb (GtkMenu * gm, DbusmenuMenuitem * mi) +{ + dbusmenu_menuitem_send_about_to_show(mi); + return TRUE; +} + /* Process the visible property */ static void process_visible (DbusmenuMenuitem * mi, GtkMenuItem * gmi, const GValue * value) @@ -323,6 +331,7 @@ new_child (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint position, Dbus /* Oh, we don't have a submenu, build one! */ menu = GTK_MENU(gtk_menu_new()); g_object_set_data(G_OBJECT(mi), data_menu, menu); + g_signal_connect(G_OBJECT(menu), "show", G_CALLBACK(menu_shown_cb), mi); GtkMenuItem * parent = dbusmenu_gtkclient_menuitem_get(gtkclient, mi); gtk_menu_item_set_submenu(parent, GTK_WIDGET(menu)); -- cgit v1.2.3 From 64db63dfe4b4bde036c1e2a454288c280f582827 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Wed, 3 Mar 2010 17:26:18 +0100 Subject: Send about_to_show instead of "clicked" when opening a submenu --- libdbusmenu-gtk/client.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 77d971e..4c82f40 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -109,18 +109,14 @@ 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()); - return TRUE; -} - -/* This is called when submenu gm of menuitem mi gets shown. */ -static gboolean -menu_shown_cb (GtkMenu * gm, DbusmenuMenuitem * mi) -{ - dbusmenu_menuitem_send_about_to_show(mi); + 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 { + dbusmenu_menuitem_send_about_to_show(mi); + } return TRUE; } @@ -331,7 +327,6 @@ new_child (DbusmenuMenuitem * mi, DbusmenuMenuitem * child, guint position, Dbus /* Oh, we don't have a submenu, build one! */ menu = GTK_MENU(gtk_menu_new()); g_object_set_data(G_OBJECT(mi), data_menu, menu); - g_signal_connect(G_OBJECT(menu), "show", G_CALLBACK(menu_shown_cb), mi); GtkMenuItem * parent = dbusmenu_gtkclient_menuitem_get(gtkclient, mi); gtk_menu_item_set_submenu(parent, GTK_WIDGET(menu)); -- cgit v1.2.3 From f3681a09522d6381eef14525eafdc4c467420879 Mon Sep 17 00:00:00 2001 From: Aurelien Gateau Date: Wed, 3 Mar 2010 17:27:05 +0100 Subject: Send about_to_show when showing the first-level menu. --- libdbusmenu-gtk/menu.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index d2a8620..cdc2287 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -95,6 +95,17 @@ dbusmenu_gtkmenu_class_init (DbusmenuGtkMenuClass *klass) return; } +static void +menu_focus_cb(DbusmenuGtkMenu * menu, gpointer userdata) +{ + g_debug(__FUNCTION__); + DbusmenuGtkMenuPrivate * priv = DBUSMENU_GTKMENU_GET_PRIVATE(menu); + if (priv->client != NULL) { + dbusmenu_client_send_about_to_show(DBUSMENU_CLIENT(priv->client), 0); + } + return; +} + static void dbusmenu_gtkmenu_init (DbusmenuGtkMenu *self) { @@ -105,6 +116,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; } -- cgit v1.2.3 From 2033f92976ad4e34f01ebf14d11f2198e7ec5142 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 31 Mar 2010 12:55:21 -0500 Subject: Removing a debug message --- libdbusmenu-gtk/menu.c | 1 - 1 file changed, 1 deletion(-) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/menu.c b/libdbusmenu-gtk/menu.c index cdc2287..8a2b318 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -98,7 +98,6 @@ dbusmenu_gtkmenu_class_init (DbusmenuGtkMenuClass *klass) static void menu_focus_cb(DbusmenuGtkMenu * menu, gpointer userdata) { - g_debug(__FUNCTION__); DbusmenuGtkMenuPrivate * priv = DBUSMENU_GTKMENU_GET_PRIVATE(menu); if (priv->client != NULL) { dbusmenu_client_send_about_to_show(DBUSMENU_CLIENT(priv->client), 0); -- cgit v1.2.3 From 79f8505edd8fd05373275f2835e2400d7611fcf5 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 31 Mar 2010 13:49:32 -0500 Subject: Fixing the calls into the about_to_show stuff so that we can add callbacks. --- libdbusmenu-gtk/client.c | 4 +++- libdbusmenu-gtk/menu.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'libdbusmenu-gtk') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 4c82f40..bef27dd 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -115,7 +115,9 @@ menu_pressed_cb (GtkMenuItem * gmi, DbusmenuMenuitem * mi) g_value_set_int(&value, 0); dbusmenu_menuitem_handle_event(mi, "clicked", &value, gtk_get_current_event_time()); } else { - dbusmenu_menuitem_send_about_to_show(mi); + /* 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 8a2b318..103ecfe 100644 --- a/libdbusmenu-gtk/menu.c +++ b/libdbusmenu-gtk/menu.c @@ -100,7 +100,9 @@ menu_focus_cb(DbusmenuGtkMenu * menu, gpointer userdata) { DbusmenuGtkMenuPrivate * priv = DBUSMENU_GTKMENU_GET_PRIVATE(menu); if (priv->client != NULL) { - dbusmenu_client_send_about_to_show(DBUSMENU_CLIENT(priv->client), 0); + /* 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; } -- cgit v1.2.3