Addl. fix #732: Allow to display keyboard shortcut within menu item
authorColin Clark <colin.clark@cclark.uk>
Thu, 30 Jun 2022 12:12:02 +0000 (13:12 +0100)
committerColin Clark <colin.clark@cclark.uk>
Thu, 30 Jun 2022 12:12:02 +0000 (13:12 +0100)
https://github.com/BestImageViewer/geeqie/issues/732

Also show shortcuts on plugin menu pop-ups

src/menu.c
src/ui_menu.c

index f57fffe..f4fbdbf 100644 (file)
@@ -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);
index 56426d2..5528849 100644 (file)
@@ -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);