From: Foxe Chen Date: Wed, 22 Jul 2026 18:29:31 +0000 (+0000) Subject: patch 9.2.0833: GTK4: menu mnemonics do not work properly X-Git-Tag: v9.2.0833^0 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=3d640468babac697553956bd3cd41beb8acad88c;p=thirdparty%2Fvim.git patch 9.2.0833: GTK4: menu mnemonics do not work properly 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 Signed-off-by: Christian Brabandt --- diff --git a/src/gui_gtk4_menu.c b/src/gui_gtk4_menu.c index 174f2f772b..4abb38624c 100644 --- a/src/gui_gtk4_menu.c +++ b/src/gui_gtk4_menu.c @@ -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); } /* diff --git a/src/version.c b/src/version.c index 6f05376f5b..6b32cb3094 100644 --- a/src/version.c +++ b/src/version.c @@ -759,6 +759,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 833, /**/ 832, /**/