From deb447c3ce438664698e6144432b2f90ba6bea0f Mon Sep 17 00:00:00 2001 From: Geoffrey McRae Date: Thu, 30 Jul 2026 10:03:14 +1000 Subject: [PATCH] [client] kb: add support for missing key mappings Fixes #1321 --- client/src/core.c | 2 +- client/src/kb.c | 143 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 142 insertions(+), 3 deletions(-) diff --git a/client/src/core.c b/client/src/core.c index 84d8c5b4..df4fcf24 100644 --- a/client/src/core.c +++ b/client/src/core.c @@ -723,7 +723,7 @@ void core_resetOverlayInputState(void) g_state.io->MouseDown[ImGuiMouseButton_Left ] = false; g_state.io->MouseDown[ImGuiMouseButton_Right ] = false; g_state.io->MouseDown[ImGuiMouseButton_Middle] = false; - for(int key = ImGuiKey_NamedKey_BEGIN; key < ImGuiKey_NamedKey_END; key++) + for(int key = 0; key < KEY_MAX; key++) if (linux_to_imgui[key]) ImGuiIO_AddKeyEvent(g_state.io, linux_to_imgui[key], false); } diff --git a/client/src/kb.c b/client/src/kb.c index d0333566..7230611e 100644 --- a/client/src/kb.c +++ b/client/src/kb.c @@ -117,7 +117,7 @@ const uint32_t linux_to_ps2[KEY_MAX] = [KEY_KPENTER] /* = USB 88 */ = 0x00E01C, [KEY_RIGHTCTRL] /* = USB 228 */ = 0x00E01D, [KEY_KPSLASH] /* = USB 84 */ = 0x00E035, - [KEY_SYSRQ] /* = USB 70 */ = 0x00E037, + [KEY_SYSRQ] /* = USB 70 */ = 0x000054, [KEY_RIGHTALT] /* = USB 230 */ = 0x00E038, [KEY_HOME] /* = USB 74 */ = 0x00E047, [KEY_UP] /* = USB 82 */ = 0x00E048, @@ -138,9 +138,34 @@ const uint32_t linux_to_ps2[KEY_MAX] = [KEY_LEFTMETA] /* = USB 227 */ = 0x00E05B, [KEY_RIGHTMETA] /* = USB 231 */ = 0x00E05C, [KEY_COMPOSE] /* = USB 101 */ = 0x00E05D, + [KEY_POWER] /* = USB 102 */ = 0x00E05E, [KEY_F13] /* = USB 104 */ = 0x00005D, [KEY_F14] /* = USB 105 */ = 0x00005E, [KEY_F15] /* = USB 106 */ = 0x00005F, + [KEY_F16] /* = USB 107 */ = 0x000055, + [KEY_F17] /* = USB 108 */ = 0x00E003, + [KEY_F18] /* = USB 109 */ = 0x00E077, + [KEY_F19] /* = USB 110 */ = 0x00E004, + [KEY_F20] /* = USB 111 */ = 0x00005A, + [KEY_F21] /* = USB 112 */ = 0x000074, + [KEY_F22] /* = USB 113 */ = 0x00E079, + [KEY_F23] /* = USB 114 */ = 0x00006D, + [KEY_F24] /* = USB 115 */ = 0x00006F, + [KEY_OPEN] /* = USB 116 */ = 0x000064, + [KEY_HELP] /* = USB 117 */ = 0x00E075, + [KEY_MENU] /* = USB 118 */ = 0x00E01E, + [KEY_FRONT] /* = USB 119 */ = 0x00E00C, + [KEY_AGAIN] /* = USB 121 */ = 0x00E005, + [KEY_UNDO] /* = USB 122 */ = 0x00E007, + [KEY_CUT] /* = USB 123 */ = 0x00E03C, + [KEY_COPY] /* = USB 124 */ = 0x00E078, + [KEY_PASTE] /* = USB 125 */ = 0x000065, + [KEY_KPJPCOMMA] /* = USB 140 */ = 0x00005C, + [KEY_KATAKANA] /* = USB 146 */ = 0x000078, + [KEY_HIRAGANA] /* = USB 147 */ = 0x000077, + [KEY_ZENKAKUHANKAKU] /* = USB 148 */ = 0x000076, + [KEY_KPLEFTPAREN] /* = USB 182 */ = 0x00E076, + [KEY_KPRIGHTPAREN] /* = USB 183 */ = 0x00E07B, [KEY_PRINT] /* = USB 70 */ = 0x00E037, [KEY_MUTE] /* = USB 127 */ = 0x00E020, [KEY_VOLUMEUP] /* = USB 128 */ = 0x00E030, @@ -149,6 +174,19 @@ const uint32_t linux_to_ps2[KEY_MAX] = [KEY_PLAYPAUSE] /* = USB 232 */ = 0x00E022, [KEY_PREVIOUSSONG] /* = USB 234 */ = 0x00E010, [KEY_STOPCD] /* = USB 233 */ = 0x00E024, + [KEY_EJECTCD] /* = USB 236 */ = 0x00006C, + [KEY_WWW] /* = USB 240 */ = 0x00E002, + [KEY_BACK] /* = USB 241 */ = 0x00E06A, + [KEY_FORWARD] /* = USB 242 */ = 0x00E069, + [KEY_STOP] /* = USB 243 */ = 0x00E068, + [KEY_FIND] /* = USB 244 */ = 0x00E041, + [KEY_SCROLLUP] /* = USB 245 */ = 0x000075, + [KEY_SCROLLDOWN] /* = USB 246 */ = 0x00E00F, + [KEY_EDIT] /* = USB 247 */ = 0x00E008, + [KEY_SLEEP] /* = USB 248 */ = 0x00E05F, + [KEY_SCREENLOCK] /* = USB 249 */ = 0x00E012, + [KEY_REFRESH] /* = USB 250 */ = 0x00E067, + [KEY_CALC] /* = USB 251 */ = 0x00E021, }; const char * linux_to_str[KEY_MAX] = @@ -268,9 +306,34 @@ const char * linux_to_str[KEY_MAX] = [KEY_LEFTMETA] = "KEY_LEFTMETA", [KEY_RIGHTMETA] = "KEY_RIGHTMETA", [KEY_COMPOSE] = "KEY_COMPOSE", + [KEY_POWER] = "KEY_POWER", [KEY_F13] = "KEY_F13", [KEY_F14] = "KEY_F14", [KEY_F15] = "KEY_F15", + [KEY_F16] = "KEY_F16", + [KEY_F17] = "KEY_F17", + [KEY_F18] = "KEY_F18", + [KEY_F19] = "KEY_F19", + [KEY_F20] = "KEY_F20", + [KEY_F21] = "KEY_F21", + [KEY_F22] = "KEY_F22", + [KEY_F23] = "KEY_F23", + [KEY_F24] = "KEY_F24", + [KEY_OPEN] = "KEY_OPEN", + [KEY_HELP] = "KEY_HELP", + [KEY_MENU] = "KEY_MENU", + [KEY_FRONT] = "KEY_FRONT", + [KEY_AGAIN] = "KEY_AGAIN", + [KEY_UNDO] = "KEY_UNDO", + [KEY_CUT] = "KEY_CUT", + [KEY_COPY] = "KEY_COPY", + [KEY_PASTE] = "KEY_PASTE", + [KEY_KPJPCOMMA] = "KEY_KPJPCOMMA", + [KEY_KATAKANA] = "KEY_KATAKANA", + [KEY_HIRAGANA] = "KEY_HIRAGANA", + [KEY_ZENKAKUHANKAKU] = "KEY_ZENKAKUHANKAKU", + [KEY_KPLEFTPAREN] = "KEY_KPLEFTPAREN", + [KEY_KPRIGHTPAREN] = "KEY_KPRIGHTPAREN", [KEY_PRINT] = "KEY_PRINT", [KEY_MUTE] = "KEY_MUTE", [KEY_VOLUMEUP] = "KEY_VOLUMEUP", @@ -279,6 +342,19 @@ const char * linux_to_str[KEY_MAX] = [KEY_PLAYPAUSE] = "KEY_PLAYPAUSE", [KEY_PREVIOUSSONG] = "KEY_PREVIOUSSONG", [KEY_STOPCD] = "KEY_STOPCD", + [KEY_EJECTCD] = "KEY_EJECTCD", + [KEY_WWW] = "KEY_WWW", + [KEY_BACK] = "KEY_BACK", + [KEY_FORWARD] = "KEY_FORWARD", + [KEY_STOP] = "KEY_STOP", + [KEY_FIND] = "KEY_FIND", + [KEY_SCROLLUP] = "KEY_SCROLLUP", + [KEY_SCROLLDOWN] = "KEY_SCROLLDOWN", + [KEY_EDIT] = "KEY_EDIT", + [KEY_SLEEP] = "KEY_SLEEP", + [KEY_SCREENLOCK] = "KEY_SCREENLOCK", + [KEY_REFRESH] = "KEY_REFRESH", + [KEY_CALC] = "KEY_CALC", }; const char * linux_to_display[KEY_MAX] = @@ -398,9 +474,34 @@ const char * linux_to_display[KEY_MAX] = [KEY_LEFTMETA] = "LWin", [KEY_RIGHTMETA] = "RWin", [KEY_COMPOSE] = "Compose", + [KEY_POWER] = "Power", [KEY_F13] = "F13", [KEY_F14] = "F14", [KEY_F15] = "F15", + [KEY_F16] = "F16", + [KEY_F17] = "F17", + [KEY_F18] = "F18", + [KEY_F19] = "F19", + [KEY_F20] = "F20", + [KEY_F21] = "F21", + [KEY_F22] = "F22", + [KEY_F23] = "F23", + [KEY_F24] = "F24", + [KEY_OPEN] = "Open", + [KEY_HELP] = "Help", + [KEY_MENU] = "Menu", + [KEY_FRONT] = "Front", + [KEY_AGAIN] = "Again", + [KEY_UNDO] = "Undo", + [KEY_CUT] = "Cut", + [KEY_COPY] = "Copy", + [KEY_PASTE] = "Paste", + [KEY_KPJPCOMMA] = "KPJPComma", + [KEY_KATAKANA] = "Katakana", + [KEY_HIRAGANA] = "Hiragana", + [KEY_ZENKAKUHANKAKU] = "ZenkakuHankaku", + [KEY_KPLEFTPAREN] = "KPLeftParen", + [KEY_KPRIGHTPAREN] = "KPRightParen", [KEY_PRINT] = "Print", [KEY_MUTE] = "Mute", [KEY_VOLUMEUP] = "VolumeUp", @@ -409,6 +510,19 @@ const char * linux_to_display[KEY_MAX] = [KEY_PLAYPAUSE] = "PlayPause", [KEY_PREVIOUSSONG] = "PreviousSong", [KEY_STOPCD] = "StopMedia", + [KEY_EJECTCD] = "Eject", + [KEY_WWW] = "WWW", + [KEY_BACK] = "Back", + [KEY_FORWARD] = "Forward", + [KEY_STOP] = "Stop", + [KEY_FIND] = "Find", + [KEY_SCROLLUP] = "ScrollUp", + [KEY_SCROLLDOWN] = "ScrollDown", + [KEY_EDIT] = "Edit", + [KEY_SLEEP] = "Sleep", + [KEY_SCREENLOCK] = "ScreenLock", + [KEY_REFRESH] = "Refresh", + [KEY_CALC] = "Calculator", }; const int linux_to_imgui[KEY_MAX] = @@ -427,6 +541,16 @@ const int linux_to_imgui[KEY_MAX] = [KEY_BACKSPACE ] = ImGuiKey_Backspace, [KEY_SPACE ] = ImGuiKey_Space, [KEY_ENTER ] = ImGuiKey_Enter, + [KEY_LEFTCTRL ] = ImGuiKey_LeftCtrl, + [KEY_LEFTSHIFT ] = ImGuiKey_LeftShift, + [KEY_LEFTALT ] = ImGuiKey_LeftAlt, + [KEY_LEFTMETA ] = ImGuiKey_LeftSuper, + [KEY_RIGHTCTRL ] = ImGuiKey_RightCtrl, + [KEY_RIGHTSHIFT] = ImGuiKey_RightShift, + [KEY_RIGHTALT ] = ImGuiKey_RightAlt, + [KEY_RIGHTMETA ] = ImGuiKey_RightSuper, + [KEY_COMPOSE ] = ImGuiKey_Menu, + [KEY_MENU ] = ImGuiKey_Menu, [KEY_0 ] = ImGuiKey_0, [KEY_1 ] = ImGuiKey_1, [KEY_2 ] = ImGuiKey_2, @@ -475,6 +599,18 @@ const int linux_to_imgui[KEY_MAX] = [KEY_F10 ] = ImGuiKey_F10, [KEY_F11 ] = ImGuiKey_F11, [KEY_F12 ] = ImGuiKey_F12, + [KEY_F13 ] = ImGuiKey_F13, + [KEY_F14 ] = ImGuiKey_F14, + [KEY_F15 ] = ImGuiKey_F15, + [KEY_F16 ] = ImGuiKey_F16, + [KEY_F17 ] = ImGuiKey_F17, + [KEY_F18 ] = ImGuiKey_F18, + [KEY_F19 ] = ImGuiKey_F19, + [KEY_F20 ] = ImGuiKey_F20, + [KEY_F21 ] = ImGuiKey_F21, + [KEY_F22 ] = ImGuiKey_F22, + [KEY_F23 ] = ImGuiKey_F23, + [KEY_F24 ] = ImGuiKey_F24, [KEY_APOSTROPHE] = ImGuiKey_Apostrophe, [KEY_COMMA ] = ImGuiKey_Comma, [KEY_MINUS ] = ImGuiKey_Minus, @@ -483,6 +619,7 @@ const int linux_to_imgui[KEY_MAX] = [KEY_SEMICOLON ] = ImGuiKey_Semicolon, [KEY_EQUAL ] = ImGuiKey_Equal, [KEY_LEFTBRACE ] = ImGuiKey_LeftBracket, + [KEY_BACKSLASH ] = ImGuiKey_Backslash, [KEY_RIGHTBRACE] = ImGuiKey_RightBracket, [KEY_GRAVE ] = ImGuiKey_GraveAccent, [KEY_CAPSLOCK ] = ImGuiKey_CapsLock, @@ -506,5 +643,7 @@ const int linux_to_imgui[KEY_MAX] = [KEY_KPMINUS ] = ImGuiKey_KeypadSubtract, [KEY_KPPLUS ] = ImGuiKey_KeypadAdd, [KEY_KPENTER ] = ImGuiKey_KeypadEnter, - [KEY_KPEQUAL ] = ImGuiKey_KeypadEqual + [KEY_KPEQUAL ] = ImGuiKey_KeypadEqual, + [KEY_BACK ] = ImGuiKey_AppBack, + [KEY_FORWARD ] = ImGuiKey_AppForward, };