aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk/menuitem.c
diff options
context:
space:
mode:
authorCody Russell <crussell@canonical.com>2010-06-22 11:03:42 -0500
committerCody Russell <crussell@canonical.com>2010-06-22 11:03:42 -0500
commit2872698e6eb9bfab4d56f5d98fd8f9494738a398 (patch)
treeef6366f748338f562ff59857096286a9adb084a5 /libdbusmenu-gtk/menuitem.c
parent424ab1c0d64300c065c3f19e1b5fae222f8828e9 (diff)
downloadlibdbusmenu-2872698e6eb9bfab4d56f5d98fd8f9494738a398.tar.gz
libdbusmenu-2872698e6eb9bfab4d56f5d98fd8f9494738a398.tar.bz2
libdbusmenu-2872698e6eb9bfab4d56f5d98fd8f9494738a398.zip
Fix setting shortcuts from GtkMenuItem
Diffstat (limited to 'libdbusmenu-gtk/menuitem.c')
-rw-r--r--libdbusmenu-gtk/menuitem.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c
index a448f88..57cd258 100644
--- a/libdbusmenu-gtk/menuitem.c
+++ b/libdbusmenu-gtk/menuitem.c
@@ -246,19 +246,20 @@ dbusmenu_menuitem_property_set_shortcut_menuitem (DbusmenuMenuitem * menuitem, c
g_return_val_if_fail(GTK_IS_MENU_ITEM(gmi), FALSE);
GClosure * closure = NULL;
- GList * clist;
+ GtkWidget *label = GTK_BIN (gmi)->child;
- clist = gtk_widget_list_accel_closures(GTK_WIDGET(gmi));
- if (clist == NULL) {
- g_warning("Menuitem does not have any closures.");
- return FALSE;
- }
+ if (GTK_IS_ACCEL_LABEL (label))
+ {
+ g_object_get (label,
+ "accel-closure", &closure,
+ NULL);
+ }
- closure = (GClosure *)clist->data;
- g_list_free(clist);
+ if (closure == NULL)
+ return FALSE;
GtkAccelGroup * group = gtk_accel_group_from_accel_closure(closure);
-
+
/* Seriously, if this returns NULL something is seriously
wrong in GTK. */
g_return_val_if_fail(group != NULL, FALSE);
@@ -267,6 +268,9 @@ dbusmenu_menuitem_property_set_shortcut_menuitem (DbusmenuMenuitem * menuitem, c
/* Again, not much we can do except complain loudly. */
g_return_val_if_fail(key != NULL, FALSE);
+ if (!gtk_accelerator_valid (key->accel_key, key->accel_mods))
+ return FALSE;
+
return dbusmenu_menuitem_property_set_shortcut(menuitem, key->accel_key, key->accel_mods);
}