]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.2.0833: GTK4: menu mnemonics do not work properly v9.2.0833
authorFoxe Chen <chen.foxe@gmail.com>
Wed, 22 Jul 2026 18:29:31 +0000 (18:29 +0000)
committerChristian Brabandt <cb@256bit.org>
Wed, 22 Jul 2026 18:29:31 +0000 (18:29 +0000)
Problem:  GTK4: menu mnemonics do not work properly
Solution: Force "mnemonics-visible" back on via a notify handler and
          set the active item on "mnemonic-activate" (Foxe Chen).

closes: #20722

Signed-off-by: Foxe Chen <chen.foxe@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/gui_gtk4_menu.c
src/version.c

index 174f2f772bf204b757a3599501201f5b72acafea..4abb38624c62bcafa00da8e8b9ae7bf213c5669c 100644 (file)
@@ -805,6 +805,15 @@ vim_menu_focus_cb(GtkEventController *controller UNUSED, VimMenu *self)
     gtk_popover_set_mnemonics_visible(GTK_POPOVER(self), TRUE);
 }
 
+    static void
+vim_menu_notify_mnemonics_cb(
+       VimMenu     *self,
+       GParamSpec  *pspec UNUSED,
+       void        *udata UNUSED)
+{
+    gtk_popover_set_mnemonics_visible(GTK_POPOVER(self), TRUE);
+}
+
     static void
 vim_menu_init(VimMenu *self)
 {
@@ -881,6 +890,10 @@ vim_menu_init(VimMenu *self)
     }
     g_object_unref(controllers);
 
+    // Force enable mnemonics underline
+    g_signal_connect(self, "notify::mnemonics-visible",
+           G_CALLBACK(vim_menu_notify_mnemonics_cb), NULL);
+
     self->prev_x = self->prev_y = -1;
 }
 
@@ -932,6 +945,17 @@ vim_menu_item_clicked_cb(VimMenuItem *self, VimMenu *menu)
        self->func(self, VIM_MENU_ITEM_CLICKED, self->func_udata);
 }
 
+    static gboolean
+vim_menu_item_mnemonic_activate_cb(
+       VimMenuItem *self,
+       gboolean    group UNUSED,
+       VimMenu     *menu)
+{
+    vim_menu_set_active_item(menu, self, FALSE);
+    // Return FALSE so that menu item emits "clicked" signal
+    return FALSE;
+}
+
     static void
 vim_menu_item_enter_cb(
        GtkEventController  *controller,
@@ -984,6 +1008,9 @@ vim_menu_insert_item(VimMenu *self, VimMenuItem *item, int idx)
     g_signal_connect_object(item, "clicked",
            G_CALLBACK(vim_menu_item_clicked_cb),
            self, G_CONNECT_DEFAULT);
+    g_signal_connect_object(item, "mnemonic-activate",
+           G_CALLBACK(vim_menu_item_mnemonic_activate_cb),
+           self, G_CONNECT_DEFAULT);
 }
 
 /*
index 6f05376f5b42eda59b44c6475152d039b87d8f6d..6b32cb30942fa16712c2676108b633dbd5e0eefa 100644 (file)
@@ -759,6 +759,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    833,
 /**/
     832,
 /**/