From: Colin Clark Date: Thu, 30 Jun 2022 12:12:02 +0000 (+0100) Subject: Addl. fix #732: Allow to display keyboard shortcut within menu item X-Git-Tag: gtk2final~2 X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git;a=commitdiff_plain;h=756f29e80a9147f32dc6010980e7968f6d0fa604 Addl. fix #732: Allow to display keyboard shortcut within menu item https://github.com/BestImageViewer/geeqie/issues/732 Also show shortcuts on plugin menu pop-ups --- diff --git a/src/menu.c b/src/menu.c index f57fffe0..f4fbdbf2 100644 --- a/src/menu.c +++ b/src/menu.c @@ -115,11 +115,16 @@ GtkWidget *submenu_add_edit(GtkWidget *menu, GtkWidget **menu_item, GCallback fu { GtkWidget *item; GtkWidget *submenu; + GtkAccelGroup *accel_group; + accel_group = gtk_accel_group_new(); item = menu_item_add(menu, _("_Plugins"), NULL, NULL); submenu = gtk_menu_new(); g_object_set_data(G_OBJECT(submenu), "submenu_data", data); + gtk_menu_set_accel_group(GTK_MENU(submenu), accel_group); + g_object_set_data(G_OBJECT(submenu), "accel_group", accel_group); + add_edit_items(submenu, func, fd_list); gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), submenu); diff --git a/src/ui_menu.c b/src/ui_menu.c index 56426d2a..5528849b 100644 --- a/src/ui_menu.c +++ b/src/ui_menu.c @@ -139,33 +139,37 @@ static void menu_item_add_main_window_accelerator(GtkWidget *menu, GtkAccelGroup g_assert(lw && lw->ui_manager); groups = gtk_ui_manager_get_action_groups(lw->ui_manager); - actions = gtk_action_group_list_actions(GTK_ACTION_GROUP(groups->data)); // Only the first group required - actions = g_list_sort(actions, actions_sort_cb); - while (actions) + while (groups) { - action = GTK_ACTION(actions->data); - accel_path = gtk_action_get_accel_path(action); - if (accel_path && gtk_accel_map_lookup_entry(accel_path, &key)) + actions = gtk_action_group_list_actions(GTK_ACTION_GROUP(groups->data)); + actions = g_list_sort(actions, actions_sort_cb); + + while (actions) { - g_object_get(action, "label", &action_label, NULL); + action = GTK_ACTION(actions->data); + accel_path = gtk_action_get_accel_path(action); + if (accel_path && gtk_accel_map_lookup_entry(accel_path, &key)) + { + g_object_get(action, "label", &action_label, NULL); - pango_parse_markup(action_label, -1, '_', NULL, &action_label_text, NULL, NULL); + pango_parse_markup(action_label, -1, '_', NULL, &action_label_text, NULL, NULL); - if (g_strcmp0(action_label_text, menu_label_text) == 0) - { - if (key.accel_key != 0) + if (g_strcmp0(action_label_text, menu_label_text) == 0) { - gtk_widget_add_accelerator(menu, "activate", accel_group, key.accel_key, key.accel_mods, GTK_ACCEL_VISIBLE); + if (key.accel_key != 0) + { + gtk_widget_add_accelerator(menu, "activate", accel_group, key.accel_key, key.accel_mods, GTK_ACCEL_VISIBLE); - break; + break; + } } + g_free(action_label_text); + g_free(action_label); } - - g_free(action_label_text); - g_free(action_label); + actions = actions->next; } - actions = actions->next; + groups = groups->next; } g_free(menu_label);