From b2be41cd5085e821f5557303592c11a064eef104 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 16:10:54 -0500 Subject: Add two functions for setting and getting the accelerator group. --- libdbusmenu-gtk/client.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 3bd0af6..64f6a6d 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -99,6 +99,40 @@ dbusmenu_gtkclient_finalize (GObject *object) return; } +/** + dbusmenu_gtkclient_set_accel_group: + @client: To set the group on + @agroup: The new acceleration group + + Sets the acceleration group for the menu items with accelerators + on this client. +*/ +void +dbusmenu_gtkclient_set_accel_group (DbusmenuGtkClient * client, GtkAccelGroup * agroup) +{ + g_return_if_fail(DBUSMENU_IS_GTKCLIENT(client)); + g_return_if_fail(GTK_IS_ACCEL_GROUP(agroup)); + + return; +} + +/** + dbusmenu_gtkclient_get_accel_group: + @client: Client to query for an accelerator group + + Gets the accel group for this client. + + Return value: Either a valid group or #NULL on error or + none set. +*/ +GtkAccelGroup * +dbusmenu_gtkclient_get_accel_group (DbusmenuGtkClient * client) +{ + g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), NULL); + + return NULL; +} + /* Internal Functions */ static const gchar * data_menuitem = "dbusmenugtk-data-gtkmenuitem"; -- cgit v1.2.3 From b426c6e47fbfa4c701a264c765a47b7fba820e8c Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 16:15:30 -0500 Subject: Adding a private area on to the client. --- libdbusmenu-gtk/client.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 64f6a6d..09e7b4e 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -36,6 +36,15 @@ License version 3 and version 2.1 along with this program. If not, see #include "menuitem.h" #include "genericmenuitem.h" +/* Private */ +typedef struct _DbusmenuGtkClientPrivate DbusmenuGtkClientPrivate; +struct _DbusmenuGtkClientPrivate { + GtkAccelGroup * agroup; +}; + +#define DBUSMENU_GTKCLIENT_GET_PRIVATE(o) \ +(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_GTKCLIENT_TYPE, DbusmenuGtkClientPrivate)) + /* Prototypes */ static void dbusmenu_gtkclient_class_init (DbusmenuGtkClientClass *klass); static void dbusmenu_gtkclient_init (DbusmenuGtkClient *self); @@ -62,6 +71,8 @@ dbusmenu_gtkclient_class_init (DbusmenuGtkClientClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + g_type_class_add_private (klass, sizeof (DbusmenuGtkClientPrivate)); + object_class->dispose = dbusmenu_gtkclient_dispose; object_class->finalize = dbusmenu_gtkclient_finalize; @@ -73,6 +84,10 @@ dbusmenu_gtkclient_class_init (DbusmenuGtkClientClass *klass) static void dbusmenu_gtkclient_init (DbusmenuGtkClient *self) { + DbusmenuGtkClientPrivate * priv = DBUSMENU_GTKCLIENT_GET_PRIVATE(self); + + priv->agroup = NULL; + dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(self), DBUSMENU_CLIENT_TYPES_DEFAULT, new_item_normal); dbusmenu_client_add_type_handler(DBUSMENU_CLIENT(self), DBUSMENU_CLIENT_TYPES_SEPARATOR, new_item_seperator); @@ -85,6 +100,12 @@ dbusmenu_gtkclient_init (DbusmenuGtkClient *self) static void dbusmenu_gtkclient_dispose (GObject *object) { + DbusmenuGtkClientPrivate * priv = DBUSMENU_GTKCLIENT_GET_PRIVATE(object); + + if (priv->agroup != NULL) { + g_object_unref(priv->agroup); + priv->agroup = NULL; + } G_OBJECT_CLASS (dbusmenu_gtkclient_parent_class)->dispose (object); return; -- cgit v1.2.3 From a27e07f2173dea07625df51466563b1caeddb385 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 17:04:37 -0500 Subject: Fleshing out setting and getting the accel group --- libdbusmenu-gtk/client.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 09e7b4e..ca0b668 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -120,6 +120,48 @@ dbusmenu_gtkclient_finalize (GObject *object) return; } +static void +swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { + gpointer * array = (gpointer *)userdata; + DbusmenuGtkClient * client = (DbusmenuGtkClient *)array[0]; + GtkAccelGroup * old_agroup = (GtkAccelGroup *)array[1]; + GtkAccelGroup * new_agroup = (GtkAccelGroup *)array[2]; + + /* If we don't have a shortcut we don't care */ + if (!dbusmenu_menuitem_property_exist(mi, DBUSMENU_MENUITEM_PROP_SHORTCUT)) { + return; + } + + guint key = 0; + GdkModifierType modifiers = 0; + + dbusmenu_menuitem_property_get_shortcut(mi, &key, &modifiers); + + if (key == 0) { + return; + } + + GtkMenuItem * gmi = dbusmenu_gtkclient_menuitem_get(client, mi); + if (gmi == NULL) { + return; + } + + if (old_agroup != NULL) { + gtk_widget_remove_accelerator(GTK_WIDGET(gmi), old_agroup, key, modifiers); + } + + if (new_agroup != NULL) { + gtk_widget_add_accelerator(GTK_WIDGET(gmi), + "activate", + new_agroup, + key, + modifiers, + GTK_ACCEL_VISIBLE); + } + + return; +} + /** dbusmenu_gtkclient_set_accel_group: @client: To set the group on @@ -134,6 +176,23 @@ dbusmenu_gtkclient_set_accel_group (DbusmenuGtkClient * client, GtkAccelGroup * g_return_if_fail(DBUSMENU_IS_GTKCLIENT(client)); g_return_if_fail(GTK_IS_ACCEL_GROUP(agroup)); + DbusmenuGtkClientPrivate * priv = DBUSMENU_GTKCLIENT_GET_PRIVATE(client); + + DbusmenuMenuitem * root = dbusmenu_client_get_root(DBUSMENU_CLIENT(client)); + if (root != NULL) { + gpointer data[3]; + data[0] = client; + data[1] = priv->agroup; + data[2] = agroup; + + dbusmenu_menuitem_foreach(root, swap_agroup, data); + } + + if (priv->agroup != NULL) { + g_object_unref(priv->agroup); + priv->agroup = NULL; + } + return; } @@ -151,7 +210,9 @@ dbusmenu_gtkclient_get_accel_group (DbusmenuGtkClient * client) { g_return_val_if_fail(DBUSMENU_IS_GTKCLIENT(client), NULL); - return NULL; + DbusmenuGtkClientPrivate * priv = DBUSMENU_GTKCLIENT_GET_PRIVATE(client); + + return priv->agroup; } /* Internal Functions */ -- cgit v1.2.3 From be82ae8c060f84b28d4e4c6fb0c4b11062112984 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 17:09:02 -0500 Subject: Restructuring to use a structure to get cleaner type checking. --- libdbusmenu-gtk/client.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index ca0b668..f5d683c 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -120,12 +120,19 @@ dbusmenu_gtkclient_finalize (GObject *object) return; } +/* Structure for passing data to swap_agroup */ +typedef struct _swap_agroup_t swap_agroup_t; +struct _swap_agroup_t { + DbusmenuGtkClient * client; + GtkAccelGroup * old_agroup; + GtkAccelGroup * new_agroup; +}; + +/* Looks at the old version of the accelerator group and + the new one and makes the state proper. */ static void swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { - gpointer * array = (gpointer *)userdata; - DbusmenuGtkClient * client = (DbusmenuGtkClient *)array[0]; - GtkAccelGroup * old_agroup = (GtkAccelGroup *)array[1]; - GtkAccelGroup * new_agroup = (GtkAccelGroup *)array[2]; + swap_agroup_t * data = (swap_agroup_t *)userdata; /* If we don't have a shortcut we don't care */ if (!dbusmenu_menuitem_property_exist(mi, DBUSMENU_MENUITEM_PROP_SHORTCUT)) { @@ -141,19 +148,19 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { return; } - GtkMenuItem * gmi = dbusmenu_gtkclient_menuitem_get(client, mi); + GtkMenuItem * gmi = dbusmenu_gtkclient_menuitem_get(data->client, mi); if (gmi == NULL) { return; } - if (old_agroup != NULL) { - gtk_widget_remove_accelerator(GTK_WIDGET(gmi), old_agroup, key, modifiers); + if (data->old_agroup != NULL) { + gtk_widget_remove_accelerator(GTK_WIDGET(gmi), data->old_agroup, key, modifiers); } - if (new_agroup != NULL) { + if (data->new_agroup != NULL) { gtk_widget_add_accelerator(GTK_WIDGET(gmi), "activate", - new_agroup, + data->new_agroup, key, modifiers, GTK_ACCEL_VISIBLE); @@ -180,12 +187,12 @@ dbusmenu_gtkclient_set_accel_group (DbusmenuGtkClient * client, GtkAccelGroup * DbusmenuMenuitem * root = dbusmenu_client_get_root(DBUSMENU_CLIENT(client)); if (root != NULL) { - gpointer data[3]; - data[0] = client; - data[1] = priv->agroup; - data[2] = agroup; + swap_agroup_t data; + data.client = client; + data.old_agroup = priv->agroup; + data.new_agroup = agroup; - dbusmenu_menuitem_foreach(root, swap_agroup, data); + dbusmenu_menuitem_foreach(root, swap_agroup, &data); } if (priv->agroup != NULL) { @@ -193,6 +200,8 @@ dbusmenu_gtkclient_set_accel_group (DbusmenuGtkClient * client, GtkAccelGroup * priv->agroup = NULL; } + priv->agroup = agroup; + return; } -- cgit v1.2.3 From 1338ccff53e35cafae1500eb5414514c57af15bf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 19:59:13 -0500 Subject: Adding a function to refresh the shortcut of a menuitem. --- libdbusmenu-gtk/client.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index f5d683c..625c4ba 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -169,6 +169,24 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { return; } +/* Refresh the shortcut for an entry */ +static void +refresh_shortcut (DbusmenuGtkClient * client, DbusmenuMenuitem * mi) +{ + g_return_if_fail(DBUSMENU_IS_GTKCLIENT(client)); + g_return_if_fail(DBUSMENU_IS_MENUITEM(mi)); + + DbusmenuGtkClientPrivate * priv = DBUSMENU_GTKCLIENT_GET_PRIVATE(client); + + swap_agroup_t data; + data.client = client; + data.old_agroup = priv->agroup; + data.new_agroup = priv->agroup; + + return swap_agroup(mi, &data); +} + + /** dbusmenu_gtkclient_set_accel_group: @client: To set the group on -- cgit v1.2.3 From 85d700350d533fc1989aa7cb6cfe9e973b4db552 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 14 Jun 2010 20:05:19 -0500 Subject: Connecting up the refresh cycles to property changes and creation. --- libdbusmenu-gtk/client.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 625c4ba..ab7f16c 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -368,6 +368,17 @@ menu_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GValue * value, GtkMen return; } +/* Special handler for the shortcut changing as we need to have the + client for that one to get the accel group. */ +static void +menu_shortcut_change_cb (DbusmenuMenuitem * mi, gchar * prop, GValue * value, DbusmenuGtkClient * client) +{ + if (!g_strcmp0(prop, DBUSMENU_MENUITEM_PROP_SHORTCUT)) { + refresh_shortcut(client, mi); + } + return; +} + /* Call back that happens when the DbusmenuMenuitem is destroyed. We're making sure to clean up everything else down the pipe. */ @@ -434,6 +445,7 @@ dbusmenu_gtkclient_newitem_base (DbusmenuGtkClient * client, DbusmenuMenuitem * /* DbusmenuMenuitem signals */ g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_prop_change_cb), gmi); + g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_PROPERTY_CHANGED, G_CALLBACK(menu_shortcut_change_cb), client); g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_CHILD_REMOVED, G_CALLBACK(delete_child), client); g_signal_connect(G_OBJECT(item), DBUSMENU_MENUITEM_SIGNAL_CHILD_MOVED, G_CALLBACK(move_child), client); @@ -448,6 +460,7 @@ dbusmenu_gtkclient_newitem_base (DbusmenuGtkClient * client, DbusmenuMenuitem * process_sensitive(item, gmi, dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_ENABLED)); process_toggle_type(item, gmi, dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_TOGGLE_TYPE)); process_toggle_state(item, gmi, dbusmenu_menuitem_property_get_value(item, DBUSMENU_MENUITEM_PROP_TOGGLE_STATE)); + refresh_shortcut(client, item); /* Oh, we're a child, let's deal with that */ if (parent != NULL) { -- cgit v1.2.3 From 97513daeb03ba302613de3ebbfcf356bc75fa611 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Jun 2010 13:49:05 -0500 Subject: Switch to using the accel map with paths --- libdbusmenu-gtk/client.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index ab7f16c..a9c6657 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -153,17 +153,20 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { return; } - if (data->old_agroup != NULL) { - gtk_widget_remove_accelerator(GTK_WIDGET(gmi), data->old_agroup, key, modifiers); + const gchar * accel_path = gtk_menu_item_get_accel_path(gmi); + + if (accel_path != NULL) { + gtk_accel_map_change_entry(accel_path, key, modifiers, TRUE /* replace */); + } else { + gchar * accel_path = g_strdup_printf("/Generated/%d", dbusmenu_menuitem_get_id(mi)); + gtk_accel_map_add_entry(accel_path, key, modifiers); + gtk_menu_item_set_accel_path(gmi, accel_path); + g_free(accel_path); } - if (data->new_agroup != NULL) { - gtk_widget_add_accelerator(GTK_WIDGET(gmi), - "activate", - data->new_agroup, - key, - modifiers, - GTK_ACCEL_VISIBLE); + GtkMenu * submenu = dbusmenu_gtkclient_menuitem_get_submenu(data->client, mi); + if (submenu != NULL) { + gtk_menu_set_accel_group(submenu, data->new_agroup); } return; -- cgit v1.2.3 From 81f4b7c5e21a23e97bdd267567b40cdbe0d528b7 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Jun 2010 14:10:22 -0500 Subject: Making the path more unique and using the lower level path set function. --- libdbusmenu-gtk/client.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index a9c6657..c7d1140 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -158,9 +158,9 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { if (accel_path != NULL) { gtk_accel_map_change_entry(accel_path, key, modifiers, TRUE /* replace */); } else { - gchar * accel_path = g_strdup_printf("/Generated/%d", dbusmenu_menuitem_get_id(mi)); + gchar * accel_path = g_strdup_printf("/Generated/%X/%d", GPOINTER_TO_UINT(data->client), dbusmenu_menuitem_get_id(mi)); gtk_accel_map_add_entry(accel_path, key, modifiers); - gtk_menu_item_set_accel_path(gmi, accel_path); + gtk_widget_set_accel_path(GTK_WIDGET(gmi), accel_path, data->new_agroup); g_free(accel_path); } -- cgit v1.2.3 From 71817a1eed1c49d358d7cb1c093321ddc91fb258 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 15 Jun 2010 14:47:29 -0500 Subject: Adding a debug message --- libdbusmenu-gtk/client.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index c7d1140..d45360a 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -143,6 +143,8 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { GdkModifierType modifiers = 0; dbusmenu_menuitem_property_get_shortcut(mi, &key, &modifiers); + + g_debug("Setting shortcut on '%s': %d %X", dbusmenu_menuitem_property_get(mi, DBUSMENU_MENUITEM_PROP_LABEL), key, modifiers); if (key == 0) { return; -- cgit v1.2.3 From cfdd33a19758224cb835efa705a410d3d4d0db91 Mon Sep 17 00:00:00 2001 From: Cody Russell Date: Mon, 21 Jun 2010 14:37:18 -0500 Subject: Add the accelerators. --- libdbusmenu-gtk/client.c | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index d45360a..91bc816 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -130,13 +130,13 @@ struct _swap_agroup_t { /* Looks at the old version of the accelerator group and the new one and makes the state proper. */ -static void -swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { - swap_agroup_t * data = (swap_agroup_t *)userdata; +static gboolean +do_swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { + swap_agroup_t * data = (swap_agroup_t *)userdata; /* If we don't have a shortcut we don't care */ if (!dbusmenu_menuitem_property_exist(mi, DBUSMENU_MENUITEM_PROP_SHORTCUT)) { - return; + return FALSE; } guint key = 0; @@ -145,14 +145,14 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { dbusmenu_menuitem_property_get_shortcut(mi, &key, &modifiers); g_debug("Setting shortcut on '%s': %d %X", dbusmenu_menuitem_property_get(mi, DBUSMENU_MENUITEM_PROP_LABEL), key, modifiers); - + if (key == 0) { - return; + return FALSE; } GtkMenuItem * gmi = dbusmenu_gtkclient_menuitem_get(data->client, mi); if (gmi == NULL) { - return; + return FALSE; } const gchar * accel_path = gtk_menu_item_get_accel_path(gmi); @@ -161,6 +161,7 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { gtk_accel_map_change_entry(accel_path, key, modifiers, TRUE /* replace */); } else { gchar * accel_path = g_strdup_printf("/Generated/%X/%d", GPOINTER_TO_UINT(data->client), dbusmenu_menuitem_get_id(mi)); + gtk_accel_map_add_entry(accel_path, key, modifiers); gtk_widget_set_accel_path(GTK_WIDGET(gmi), accel_path, data->new_agroup); g_free(accel_path); @@ -171,7 +172,14 @@ swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { gtk_menu_set_accel_group(submenu, data->new_agroup); } - return; + return TRUE; +} + +static void +swap_agroup (DbusmenuMenuitem *mi, gpointer userdata) { + do_swap_agroup (mi, userdata); + + return; /* See what I did here, Ted? :) */ } /* Refresh the shortcut for an entry */ @@ -188,7 +196,17 @@ refresh_shortcut (DbusmenuGtkClient * client, DbusmenuMenuitem * mi) data.old_agroup = priv->agroup; data.new_agroup = priv->agroup; - return swap_agroup(mi, &data); + if (do_swap_agroup(mi, &data)) { + guint key; + GdkModifierType mod; + GtkMenuItem *gmi = dbusmenu_gtkclient_menuitem_get (client, mi); + + dbusmenu_menuitem_property_get_shortcut (mi, &key, &mod); + + gtk_widget_add_accelerator (GTK_WIDGET (gmi), "activate", priv->agroup, key, mod, GTK_ACCEL_VISIBLE); + } + + return; } -- cgit v1.2.3 From 2a90535dae3ef2d97ff02c2c6325615de0f6ca09 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 22 Jun 2010 16:29:08 -0500 Subject: Cleaning up usage of get_shortcut to only print/set if it sets a key --- libdbusmenu-gtk/client.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'libdbusmenu-gtk/client.c') diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c index 91bc816..c73c90f 100644 --- a/libdbusmenu-gtk/client.c +++ b/libdbusmenu-gtk/client.c @@ -144,12 +144,12 @@ do_swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) { dbusmenu_menuitem_property_get_shortcut(mi, &key, &modifiers); - g_debug("Setting shortcut on '%s': %d %X", dbusmenu_menuitem_property_get(mi, DBUSMENU_MENUITEM_PROP_LABEL), key, modifiers); - if (key == 0) { return FALSE; } + g_debug("Setting shortcut on '%s': %d %X", dbusmenu_menuitem_property_get(mi, DBUSMENU_MENUITEM_PROP_LABEL), key, modifiers); + GtkMenuItem * gmi = dbusmenu_gtkclient_menuitem_get(data->client, mi); if (gmi == NULL) { return FALSE; @@ -197,16 +197,18 @@ refresh_shortcut (DbusmenuGtkClient * client, DbusmenuMenuitem * mi) data.new_agroup = priv->agroup; if (do_swap_agroup(mi, &data)) { - guint key; - GdkModifierType mod; - GtkMenuItem *gmi = dbusmenu_gtkclient_menuitem_get (client, mi); + guint key = 0; + GdkModifierType mod = 0; + GtkMenuItem *gmi = dbusmenu_gtkclient_menuitem_get (client, mi); - dbusmenu_menuitem_property_get_shortcut (mi, &key, &mod); + dbusmenu_menuitem_property_get_shortcut (mi, &key, &mod); - gtk_widget_add_accelerator (GTK_WIDGET (gmi), "activate", priv->agroup, key, mod, GTK_ACCEL_VISIBLE); - } + if (key != 0) { + gtk_widget_add_accelerator (GTK_WIDGET (gmi), "activate", priv->agroup, key, mod, GTK_ACCEL_VISIBLE); + } + } - return; + return; } -- cgit v1.2.3