Rebase against 2a505efb1ca14f33503657eb070de6edd484b4f3.

This commit is contained in:
Alistair Leslie-Hughes
2021-06-10 10:07:27 +10:00
parent daec2e3662
commit 08912e4896
5 changed files with 57 additions and 59 deletions

View File

@@ -1,14 +1,14 @@
From 298b86133dd143722c0395474c0a98e89c0af937 Mon Sep 17 00:00:00 2001
From b3e883936f94d291de16a551df25ebaa544fd22d Mon Sep 17 00:00:00 2001
From: Ken Thomases <ken@codeweavers.com>
Date: Tue, 11 Dec 2018 08:30:41 +1100
Subject: [PATCH] winex11: Match keyboard in Unicode
---
dlls/winex11.drv/keyboard.c | 163 ++++++++++++++++++++++--------------
1 file changed, 98 insertions(+), 65 deletions(-)
dlls/winex11.drv/keyboard.c | 161 ++++++++++++++++++++++--------------
1 file changed, 97 insertions(+), 64 deletions(-)
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
index 37c96c926f4..95cb4100bc9 100644
index 4db0dafb4ee..cba0dd44736 100644
--- a/dlls/winex11.drv/keyboard.c
+++ b/dlls/winex11.drv/keyboard.c
@@ -37,6 +37,7 @@
@@ -65,13 +65,11 @@ index 37c96c926f4..95cb4100bc9 100644
/**********************************************************************
* X11DRV_KEYBOARD_DetectLayout
*
@@ -1433,8 +1464,8 @@ X11DRV_KEYBOARD_DetectLayout( Display *display )
KeySym keysym = 0;
@@ -1434,7 +1465,7 @@ X11DRV_KEYBOARD_DetectLayout( Display *display )
const char (*lkey)[MAIN_LEN][4];
unsigned max_seq = 0;
- int max_score = 0, ismatch = 0;
int max_score = INT_MIN, ismatch = 0;
- char ckey[256][4];
+ int max_score = INT_MIN, ismatch = 0;
+ WCHAR ckey[256][4];
syms = keysyms_per_keycode;
@@ -145,12 +143,12 @@ index 37c96c926f4..95cb4100bc9 100644
- char str[5];
- for (i = 0; i < 4; i++) str[i] = ckey[keyc][i] ? ckey[keyc][i] : ' ';
- str[4] = 0;
- TRACE_(key)("mismatch for keycode %u, got %s\n", keyc, str);
- TRACE_(key)("mismatch for keycode %u, got %s\n", keyc, debugstr_a(str));
+ TRACE_(key)("mismatch for keycode %u, got %s\n", keyc, debugstr_wn(ckey[keyc], 4));
mismatch++;
score -= syms;
}
@@ -1613,9 +1633,11 @@ void X11DRV_InitKeyboard( Display *display )
@@ -1576,9 +1596,11 @@ void X11DRV_InitKeyboard( Display *display )
XKeyEvent e2;
WORD scan, vkey;
int keyc, i, keyn, syms;
@@ -163,7 +161,7 @@ index 37c96c926f4..95cb4100bc9 100644
/* Ranges of OEM, function key, and character virtual key codes.
* Don't include those handled specially in X11DRV_ToUnicodeEx and
@@ -1672,7 +1694,11 @@ void X11DRV_InitKeyboard( Display *display )
@@ -1633,7 +1655,11 @@ void X11DRV_InitKeyboard( Display *display )
/* Detect the keyboard layout */
X11DRV_KEYBOARD_DetectLayout( display );
lkey = main_key_tab[kbd_layout].key;
@@ -175,7 +173,7 @@ index 37c96c926f4..95cb4100bc9 100644
/* Now build two conversion arrays :
* keycode -> vkey + scancode + extended
@@ -1713,26 +1739,14 @@ void X11DRV_InitKeyboard( Display *display )
@@ -1674,26 +1700,14 @@ void X11DRV_InitKeyboard( Display *display )
int maxlen=0,maxval=-1,ok;
for (i=0; i<syms; i++) {
keysym = keycode_to_keysym(display, keyc, i);
@@ -207,7 +205,7 @@ index 37c96c926f4..95cb4100bc9 100644
if (!ok) i--; /* we overshot */
if (ok||(i>maxlen)) {
maxlen=i; maxval=keyn;
@@ -2350,7 +2364,7 @@ INT CDECL X11DRV_GetKeyNameText(LONG lParam, LPWSTR lpBuffer, INT nSize)
@@ -2256,7 +2270,7 @@ INT CDECL X11DRV_GetKeyNameText(LONG lParam, LPWSTR lpBuffer, INT nSize)
/***********************************************************************
* X11DRV_KEYBOARD_MapDeadKeysym
*/
@@ -216,7 +214,7 @@ index 37c96c926f4..95cb4100bc9 100644
{
switch (keysym)
{
@@ -2360,65 +2374,84 @@ static char KEYBOARD_MapDeadKeysym(KeySym keysym)
@@ -2266,65 +2280,84 @@ static char KEYBOARD_MapDeadKeysym(KeySym keysym)
#endif
case 0x1000FE7E : /* Xfree's XK_Dtilde */
return '~'; /* '? */
@@ -316,7 +314,7 @@ index 37c96c926f4..95cb4100bc9 100644
*/
}
TRACE("no character for dead keysym 0x%08lx\n",keysym);
@@ -2603,7 +2636,7 @@ INT CDECL X11DRV_ToUnicodeEx(UINT virtKey, UINT scanCode, const BYTE *lpKeyState
@@ -2509,7 +2542,7 @@ INT CDECL X11DRV_ToUnicodeEx(UINT virtKey, UINT scanCode, const BYTE *lpKeyState
if (ret == 0)
{
@@ -325,7 +323,7 @@ index 37c96c926f4..95cb4100bc9 100644
#ifdef XK_EuroSign
/* An ugly hack for EuroSign: X can't translate it to a character
@@ -2627,7 +2660,7 @@ INT CDECL X11DRV_ToUnicodeEx(UINT virtKey, UINT scanCode, const BYTE *lpKeyState
@@ -2533,7 +2566,7 @@ INT CDECL X11DRV_ToUnicodeEx(UINT virtKey, UINT scanCode, const BYTE *lpKeyState
dead_char = KEYBOARD_MapDeadKeysym(keysym);
if (dead_char)
{
@@ -335,5 +333,5 @@ index 37c96c926f4..95cb4100bc9 100644
goto found;
}
--
2.24.1
2.30.2