From de240cfb75382121815c69a4c41306ac619262d8 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Mon, 10 Mar 2025 10:48:49 +0100 Subject: [PATCH] [client,x11] add apple keyboard fallback Add workaround for missing XkbGetNames on apple devices --- client/X11/xf_keyboard.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/client/X11/xf_keyboard.c b/client/X11/xf_keyboard.c index e33043cdb..2595d16a2 100644 --- a/client/X11/xf_keyboard.c +++ b/client/X11/xf_keyboard.c @@ -488,13 +488,21 @@ static int load_map_from_xkbfile(xfContext* xfc) strncpy(xkb_keyname, xkb->names->keys[i].name, XkbKeyNameLength); WLog_Print(xfc->log, WLOG_TRACE, "KeyCode %" PRIuz " -> %s", i, xkb_keyname); - if (strnlen(xkb_keyname, ARRAYSIZE(xkb_keyname)) < 1) - continue; - - found = try_add(xfc, i, xkb_keyname); + if (strnlen(xkb_keyname, ARRAYSIZE(xkb_keyname)) >= 1) + found = try_add(xfc, i, xkb_keyname); if (!found) { +#if defined(__APPLE__) + const DWORD vkcode = + GetVirtualKeyCodeFromKeycode((UINT32)i - 8u, WINPR_KEYCODE_TYPE_APPLE); + xfc->X11_KEYCODE_TO_VIRTUAL_SCANCODE[i] = + GetVirtualScanCodeFromVirtualKeyCode(vkcode, WINPR_KBD_TYPE_IBM_ENHANCED); + found = TRUE; +#endif + } + if (!found) + { WLog_Print(xfc->log, WLOG_WARN, "%4s: keycode: 0x%02X -> no RDP scancode found", xkb_keyname, i); }