From 72f7a446a6833673974b92dea850a11215cc1b56 Mon Sep 17 00:00:00 2001 From: Alex Chernika Date: Fri, 10 Apr 2026 15:08:18 +0200 Subject: [PATCH] keyboard: handle menu accelerators Expand the default case in `handle_menu_keys()`: if caught a printable character, pass it to `menu_item_select_by_accelerator()`. --- src/input/keyboard.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/input/keyboard.c b/src/input/keyboard.c index 2d4bde6e..8d9266b8 100644 --- a/src/input/keyboard.c +++ b/src/input/keyboard.c @@ -419,6 +419,19 @@ handle_change_vt_key(struct keyboard *keyboard, return false; } +static char +keysym_to_char(uint32_t keysym) { + if (keysym >= 0x0020 && keysym <= 0x00FF) { + return (char)keysym; + } + + if (keysym >= XKB_KEY_KP_0 && keysym <= XKB_KEY_KP_9) { + return (char)('0' + (keysym - XKB_KEY_KP_0)); + } + + return '\0'; +} + static void handle_menu_keys(struct keysyms *syms) { @@ -447,7 +460,14 @@ handle_menu_keys(struct keysyms *syms) cursor_update_focus(); break; default: - continue; + char accelerator = keysym_to_char(syms->syms[i]); + if (accelerator == '\0') { + continue; + } + if (menu_item_select_by_accelerator(accelerator)) { + menu_call_selected_actions(); + } + break; } break; }