From adbd80da2392b863fe382d67e3ee259d0bf6284f Mon Sep 17 00:00:00 2001 From: akallabeth Date: Tue, 11 Feb 2025 13:34:20 +0100 Subject: [PATCH] [client,x11] use FREERDP_REMAP_TABLE --- client/X11/xf_client.c | 9 +++++++++ client/X11/xf_keyboard.c | 6 +++--- client/X11/xfreerdp.h | 2 ++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/client/X11/xf_client.c b/client/X11/xf_client.c index 6b8fe06ad..d7b07ec77 100644 --- a/client/X11/xf_client.c +++ b/client/X11/xf_client.c @@ -1202,6 +1202,12 @@ static BOOL xf_pre_connect(freerdp* instance) if (!freerdp_settings_get_bool(settings, FreeRDP_AuthenticationOnly)) { + const char* KeyboardRemappingList = freerdp_settings_get_string( + xfc->common.context.settings, FreeRDP_KeyboardRemappingList); + + xfc->remap_table = freerdp_keyboard_remap_string_to_list(KeyboardRemappingList); + if (!xfc->remap_table) + return FALSE; if (!xf_keyboard_init(xfc)) return FALSE; if (!xf_keyboard_action_script_init(xfc)) @@ -1492,6 +1498,9 @@ static void xf_post_disconnect(freerdp* instance) else xf_DestroyDummyWindow(xfc, xfc->drawable); + freerdp_keyboard_remap_free(xfc->remap_table); + xfc->remap_table = NULL; + xf_window_free(xfc); } diff --git a/client/X11/xf_keyboard.c b/client/X11/xf_keyboard.c index 3e59c246c..72504be7b 100644 --- a/client/X11/xf_keyboard.c +++ b/client/X11/xf_keyboard.c @@ -159,8 +159,7 @@ BOOL xf_keyboard_init(xfContext* xfc) xf_keyboard_clear(xfc); xfc->KeyboardLayout = freerdp_settings_get_uint32(settings, FreeRDP_KeyboardLayout); - xfc->KeyboardLayout = freerdp_keyboard_init_ex( - xfc->KeyboardLayout, freerdp_settings_get_string(settings, FreeRDP_KeyboardRemappingList)); + xfc->KeyboardLayout = freerdp_keyboard_init_ex(xfc->KeyboardLayout, NULL); if (!freerdp_settings_set_uint32(settings, FreeRDP_KeyboardLayout, xfc->KeyboardLayout)) return FALSE; @@ -243,7 +242,8 @@ void xf_keyboard_send_key(xfContext* xfc, BOOL down, BOOL repeat, const XKeyEven rdpInput* input = xfc->common.context.input; WINPR_ASSERT(input); - const DWORD rdp_scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(event->keycode); + const DWORD sc = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(event->keycode); + const DWORD rdp_scancode = freerdp_keyboard_remap_key(xfc->remap_table, sc); if (rdp_scancode == RDP_SCANCODE_PAUSE && !xf_keyboard_key_pressed(xfc, XK_Control_L) && !xf_keyboard_key_pressed(xfc, XK_Control_R)) { diff --git a/client/X11/xfreerdp.h b/client/X11/xfreerdp.h index bd7824c8c..639060a31 100644 --- a/client/X11/xfreerdp.h +++ b/client/X11/xfreerdp.h @@ -53,6 +53,7 @@ typedef struct xf_context xfContext; #include #include #include +#include #if !defined(XcursorUInt) typedef unsigned int XcursorUInt; @@ -315,6 +316,7 @@ struct xf_context BOOL xi_event; HANDLE pipethread; wLog* log; + FREERDP_REMAP_TABLE* remap_table; }; BOOL xf_create_window(xfContext* xfc);