From f624876d3e4ff07f4c2cca8996ea5fe831b27dad Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Fri, 20 Jan 2012 14:07:05 -0600 Subject: [PATCH] winex11: Strip the _L or _R from X11DRV_GetKeyNameText when appropriate. --- dlls/winex11.drv/keyboard.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c index c56110277c1..160b98689c2 100644 --- a/dlls/winex11.drv/keyboard.c +++ b/dlls/winex11.drv/keyboard.c @@ -2301,6 +2301,24 @@ INT CDECL X11DRV_GetKeyNameText(LONG lParam, LPWSTR lpBuffer, INT nSize) keys = keycode_to_keysym(display, keyc, 0); name = XKeysymToString(keys); wine_tsx11_unlock(); + + if (name && (vkey == VK_SHIFT || vkey == VK_CONTROL || vkey == VK_MENU)) + { + char* idx = strrchr(name, '_'); + if (idx && (strcasecmp(idx, "_r") == 0 || strcasecmp(idx, "_l") == 0)) + { + INT rc = 0; + TRACE("found scan=%04x keyc=%u keysym=%lx modified_string=%s\n", + scanCode, keyc, keys, debugstr_an(name,idx-name)); + if (lpBuffer && nSize) + { + rc = MultiByteToWideChar(CP_UNIXCP, 0, name, idx-name+1, lpBuffer, nSize); + if (rc > 0) lpBuffer[rc - 1] = 0; + } + return rc; + } + } + TRACE("found scan=%04x keyc=%u keysym=%04x string=%s\n", scanCode, keyc, (int)keys, debugstr_a(name)); if (lpBuffer && nSize && name)