Commit e5e261f1 authored by Dmitry Timoshkov's avatar Dmitry Timoshkov Committed by Alexandre Julliard

user32: Make MapVirtualKeyEx(MAPVK_VK_TO_CHAR) behave more like in Windows.

parent e929e3b6
...@@ -622,7 +622,18 @@ UINT WINAPI MapVirtualKeyW(UINT code, UINT maptype) ...@@ -622,7 +622,18 @@ UINT WINAPI MapVirtualKeyW(UINT code, UINT maptype)
*/ */
UINT WINAPI MapVirtualKeyExA(UINT code, UINT maptype, HKL hkl) UINT WINAPI MapVirtualKeyExA(UINT code, UINT maptype, HKL hkl)
{ {
return MapVirtualKeyExW(code, maptype, hkl); UINT ret;
ret = MapVirtualKeyExW( code, maptype, hkl );
if (maptype == MAPVK_VK_TO_CHAR)
{
BYTE ch = 0;
WCHAR wch = ret;
WideCharToMultiByte( CP_ACP, 0, &wch, 1, (LPSTR)&ch, 1, NULL, NULL );
ret = ch;
}
return ret;
} }
/****************************************************************************** /******************************************************************************
......
...@@ -2121,17 +2121,15 @@ UINT X11DRV_MapVirtualKeyEx(UINT wCode, UINT wMapType, HKL hkl) ...@@ -2121,17 +2121,15 @@ UINT X11DRV_MapVirtualKeyEx(UINT wCode, UINT wMapType, HKL hkl)
/* let's do vkey -> keycode -> (XLookupString) ansi char */ /* let's do vkey -> keycode -> (XLookupString) ansi char */
XKeyEvent e; XKeyEvent e;
KeySym keysym; KeySym keysym;
int keyc; int keyc, len;
char s[2]; char s[10];
e.display = display;
e.state = LockMask; e.display = display;
/* LockMask should behave exactly like caps lock - upercase e.state = 0;
* the letter keys and that's about it. */ e.keycode = 0;
wine_tsx11_lock(); wine_tsx11_lock();
e.keycode = 0;
/* We exit on the first keycode found, to speed up the thing. */ /* We exit on the first keycode found, to speed up the thing. */
for (keyc=min_keycode; (keyc<=max_keycode) && (!e.keycode) ; keyc++) for (keyc=min_keycode; (keyc<=max_keycode) && (!e.keycode) ; keyc++)
{ /* Find a keycode that could have generated this virtual key */ { /* Find a keycode that could have generated this virtual key */
...@@ -2159,14 +2157,16 @@ UINT X11DRV_MapVirtualKeyEx(UINT wCode, UINT wMapType, HKL hkl) ...@@ -2159,14 +2157,16 @@ UINT X11DRV_MapVirtualKeyEx(UINT wCode, UINT wMapType, HKL hkl)
} }
TRACE("Found keycode %d (0x%2X)\n",e.keycode,e.keycode); TRACE("Found keycode %d (0x%2X)\n",e.keycode,e.keycode);
if (XLookupString(&e, s, 2, &keysym, NULL)) len = XLookupString(&e, s, sizeof(s), &keysym, NULL);
wine_tsx11_unlock();
if (len)
{ {
wine_tsx11_unlock(); WCHAR wch;
returnMVK (*s); if (MultiByteToWideChar(CP_UNIXCP, 0, s, len, &wch, 1))
returnMVK(toupperW(wch));
} }
TRACE("returning no ANSI.\n"); TRACE("returning no ANSI.\n");
wine_tsx11_unlock();
return 0; return 0;
} }
default: /* reserved */ default: /* reserved */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment