Commit b52c89fc authored by Ken Thomases's avatar Ken Thomases Committed by Alexandre Julliard

winemac: For GetKeyNameText(), use the hard-coded table in preference to the Mac keyboard layout.

parent c4a28490
...@@ -1229,6 +1229,8 @@ INT CDECL macdrv_GetKeyNameText(LONG lparam, LPWSTR buffer, INT size) ...@@ -1229,6 +1229,8 @@ INT CDECL macdrv_GetKeyNameText(LONG lparam, LPWSTR buffer, INT size)
UInt32 deadKeyState = 0; UInt32 deadKeyState = 0;
UniCharCount len; UniCharCount len;
OSStatus status; OSStatus status;
DWORD vkey;
int i;
uchr = (const UCKeyboardLayout*)CFDataGetBytePtr(thread_data->keyboard_layout_uchr); uchr = (const UCKeyboardLayout*)CFDataGetBytePtr(thread_data->keyboard_layout_uchr);
status = UCKeyTranslate(uchr, keyc, kUCKeyActionDisplay, 0, thread_data->keyboard_type, status = UCKeyTranslate(uchr, keyc, kUCKeyActionDisplay, 0, thread_data->keyboard_type,
...@@ -1237,51 +1239,46 @@ INT CDECL macdrv_GetKeyNameText(LONG lparam, LPWSTR buffer, INT size) ...@@ -1237,51 +1239,46 @@ INT CDECL macdrv_GetKeyNameText(LONG lparam, LPWSTR buffer, INT size)
len = 0; len = 0;
if (len && isgraphW(buffer[0])) if (len && isgraphW(buffer[0]))
buffer[len] = 0; buffer[len] = 0;
else
{
DWORD vkey = thread_data->keyc2vkey[keyc];
int i;
if (scan & 0x100) vkey |= 0x100; vkey = thread_data->keyc2vkey[keyc];
if (lparam & (1 << 25))
if (lparam & (1 << 25)) {
/* Caller doesn't care about distinctions between left and
right keys. */
switch (vkey)
{ {
/* Caller doesn't care about distinctions between left and case VK_LSHIFT:
right keys. */ case VK_RSHIFT:
switch (vkey) vkey = VK_SHIFT; break;
{ case VK_LCONTROL:
case VK_LSHIFT: case VK_RCONTROL:
case VK_RSHIFT: vkey = VK_CONTROL; break;
vkey = VK_SHIFT; break; case VK_LMENU:
case VK_LCONTROL: case VK_RMENU:
case VK_RCONTROL: vkey = VK_MENU; break;
vkey = VK_CONTROL; break;
case VK_LMENU:
case VK_RMENU:
vkey = VK_MENU; break;
}
} }
}
len = 0; if (scan & 0x100) vkey |= 0x100;
for (i = 0; i < sizeof(vkey_names) / sizeof(vkey_names[0]); i++)
{
if (vkey_names[i].vkey == vkey)
{
len = MultiByteToWideChar(CP_UTF8, 0, vkey_names[i].name, -1, buffer, size);
if (len) len--;
break;
}
}
if (!len) for (i = 0; i < sizeof(vkey_names) / sizeof(vkey_names[0]); i++)
{
if (vkey_names[i].vkey == vkey)
{ {
static const WCHAR format[] = {'K','e','y',' ','0','x','%','0','2','x',0}; len = MultiByteToWideChar(CP_UTF8, 0, vkey_names[i].name, -1, buffer, size);
snprintfW(buffer, size, format, vkey); if (len) len--;
len = strlenW(buffer); break;
} }
} }
if (!len) if (!len)
{
static const WCHAR format[] = {'K','e','y',' ','0','x','%','0','2','x',0};
snprintfW(buffer, size, format, vkey);
len = strlenW(buffer);
}
if (!len)
break; break;
if (status == noErr && deadKeyState) if (status == noErr && deadKeyState)
......
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