libwinpr-input: fix virtual key code definitions

This commit is contained in:
Marc-André Moreau 2013-03-07 13:56:00 -05:00
parent 72957e39eb
commit 32d9f76c41
4 changed files with 52 additions and 47 deletions

View File

@ -148,8 +148,8 @@
#define RDP_SCANCODE_KANA_HANGUL MAKE_RDP_SCANCODE(0x72, FALSE) /* VK_KANA / VK_HANGUL (undocumented?) */
#define RDP_SCANCODE_ABNT_C1 MAKE_RDP_SCANCODE(0x73, FALSE) /* VK_ABNT_C1 JP OEM_102 */
#define RDP_SCANCODE_F24_JP MAKE_RDP_SCANCODE(0x76, FALSE) /* JP F24 */
#define RDP_SCANCODE_CONVERT_JP MAKE_RDP_SCANCODE(0x79, FALSE) /* JP CONVERT */
#define RDP_SCANCODE_NONCONVERT_JP MAKE_RDP_SCANCODE(0x7B, FALSE) /* JP NONCONVERT */
#define RDP_SCANCODE_CONVERT_JP MAKE_RDP_SCANCODE(0x79, FALSE) /* JP VK_CONVERT */
#define RDP_SCANCODE_NONCONVERT_JP MAKE_RDP_SCANCODE(0x7B, FALSE) /* JP VK_NONCONVERT */
#define RDP_SCANCODE_TAB_JP MAKE_RDP_SCANCODE(0x7C, FALSE) /* JP TAB */
#define RDP_SCANCODE_BACKSLASH_JP MAKE_RDP_SCANCODE(0x7D, FALSE) /* JP OEM_5 ('\') */
#define RDP_SCANCODE_ABNT_C2 MAKE_RDP_SCANCODE(0x7E, FALSE) /* VK_ABNT_C2, JP */

View File

@ -42,8 +42,8 @@
#endif
DWORD RDP_SCANCODE_TO_X11_KEYCODE[256][2];
DWORD X11_KEYCODE_TO_RDP_SCANCODE[256];
DWORD VIRTUAL_SCANCODE_TO_X11_KEYCODE[256][2];
DWORD X11_KEYCODE_TO_VIRTUAL_SCANCODE[256];
int freerdp_detect_keyboard(DWORD* keyboardLayoutId)
{
@ -100,30 +100,30 @@ DWORD freerdp_keyboard_init(DWORD keyboardLayoutId)
#ifdef __APPLE__
if (status < 0)
status = freerdp_keyboard_init_apple(&keyboardLayoutId, X11_KEYCODE_TO_RDP_SCANCODE);
status = freerdp_keyboard_init_apple(&keyboardLayoutId, X11_KEYCODE_TO_VIRTUAL_SCANCODE);
#endif
#ifdef WITH_X11
#ifdef WITH_XKBFILE
if (status < 0)
status = freerdp_keyboard_init_xkbfile(&keyboardLayoutId, X11_KEYCODE_TO_RDP_SCANCODE);
status = freerdp_keyboard_init_xkbfile(&keyboardLayoutId, X11_KEYCODE_TO_VIRTUAL_SCANCODE);
#endif
if (status < 0)
status = freerdp_keyboard_init_x11_evdev(&keyboardLayoutId, X11_KEYCODE_TO_RDP_SCANCODE);
status = freerdp_keyboard_init_x11_evdev(&keyboardLayoutId, X11_KEYCODE_TO_VIRTUAL_SCANCODE);
#endif
freerdp_detect_keyboard(&keyboardLayoutId);
ZeroMemory(RDP_SCANCODE_TO_X11_KEYCODE, sizeof(RDP_SCANCODE_TO_X11_KEYCODE));
ZeroMemory(VIRTUAL_SCANCODE_TO_X11_KEYCODE, sizeof(VIRTUAL_SCANCODE_TO_X11_KEYCODE));
for (keycode = 0; keycode < ARRAYSIZE(RDP_SCANCODE_TO_X11_KEYCODE); keycode++)
for (keycode = 0; keycode < ARRAYSIZE(VIRTUAL_SCANCODE_TO_X11_KEYCODE); keycode++)
{
RDP_SCANCODE_TO_X11_KEYCODE
[RDP_SCANCODE_CODE(X11_KEYCODE_TO_RDP_SCANCODE[keycode])]
[RDP_SCANCODE_EXTENDED(X11_KEYCODE_TO_RDP_SCANCODE[keycode]) ? 1 : 0] = keycode;
VIRTUAL_SCANCODE_TO_X11_KEYCODE
[RDP_SCANCODE_CODE(X11_KEYCODE_TO_VIRTUAL_SCANCODE[keycode])]
[RDP_SCANCODE_EXTENDED(X11_KEYCODE_TO_VIRTUAL_SCANCODE[keycode]) ? 1 : 0] = keycode;
}
return keyboardLayoutId;
@ -132,16 +132,16 @@ DWORD freerdp_keyboard_init(DWORD keyboardLayoutId)
DWORD freerdp_keyboard_get_rdp_scancode_from_x11_keycode(DWORD keycode)
{
DEBUG_KBD("x11 keycode: %02X -> rdp code: %02X%s", keycode,
RDP_SCANCODE_CODE(X11_KEYCODE_TO_RDP_SCANCODE[keycode]),
RDP_SCANCODE_EXTENDED(X11_KEYCODE_TO_RDP_SCANCODE[keycode]) ? " extended" : "");
RDP_SCANCODE_CODE(X11_KEYCODE_TO_VIRTUAL_SCANCODE[keycode]),
RDP_SCANCODE_EXTENDED(X11_KEYCODE_TO_VIRTUAL_SCANCODE[keycode]) ? " extended" : "");
return X11_KEYCODE_TO_RDP_SCANCODE[keycode];
return X11_KEYCODE_TO_VIRTUAL_SCANCODE[keycode];
}
DWORD freerdp_keyboard_get_x11_keycode_from_rdp_scancode(DWORD scancode, BOOL extended)
{
if (extended)
return RDP_SCANCODE_TO_X11_KEYCODE[scancode][1];
return VIRTUAL_SCANCODE_TO_X11_KEYCODE[scancode][1];
else
return RDP_SCANCODE_TO_X11_KEYCODE[scancode][0];
return VIRTUAL_SCANCODE_TO_X11_KEYCODE[scancode][0];
}

View File

@ -154,6 +154,8 @@
/* 0x5E is reserved */
#define VK_POWER 0x5E /* Power key */
#define VK_SLEEP 0x5F /* Computer Sleep key */
/* Numeric keypad digits, the last four bits of the code represent the corresponding digit */
@ -249,6 +251,7 @@
#define VK_LAUNCH_MAIL 0xB4 /* Windows 2000/XP: Start Mail key */
#define VK_MEDIA_SELECT 0xB5 /* Windows 2000/XP: Select Media key */
#define VK_LAUNCH_MEDIA_SELECT 0xB5 /* Windows 2000/XP: Select Media key */
#define VK_LAUNCH_APP1 0xB6 /* Windows 2000/XP: Start Application 1 key */
#define VK_LAUNCH_APP2 0xB7 /* Windows 2000/XP: Start Application 2 key */
@ -311,18 +314,31 @@
/* 0xE8 is unassigned */
/* 0xE9 to 0xF5 are OEM specific */
#define VK_ATTN 0xF6 /* Attn key */
#define VK_CRSEL 0xF7 /* CrSel key */
#define VK_EXSEL 0xF8 /* ExSel key */
#define VK_EREOF 0xF9 /* Erase EOF key */
#define VK_PLAY 0xFA /* Play key */
#define VK_ZOOM 0xFB /* Zoom key */
#define VK_NONAME 0xFC /* Reserved */
#define VK_PA1 0xFD /* PA1 key */
#define VK_OEM_PA1 0xFD /* PA1 key */
#define VK_OEM_CLEAR 0xFE /* Clear key */
#define VK_OEM_RESET 0xE9
#define VK_OEM_JUMP 0xEA
#define VK_OEM_PA1 0xEB
#define VK_OEM_PA2 0xEC
#define VK_OEM_PA3 0xED
#define VK_OEM_WSCTRL 0xEE
#define VK_OEM_CUSEL 0xEF
#define VK_OEM_ATTN 0xF0
#define VK_OEM_FINISH 0xF1
#define VK_OEM_COPY 0xF2
#define VK_OEM_AUTO 0xF3
#define VK_OEM_ENLW 0xF4
#define VK_OEM_BACKTAB 0xF5
#define VK_NONE 0xFF /* no key */
#define VK_ATTN 0xF6 /* Attn key */
#define VK_CRSEL 0xF7 /* CrSel key */
#define VK_EXSEL 0xF8 /* ExSel key */
#define VK_EREOF 0xF9 /* Erase EOF key */
#define VK_PLAY 0xFA /* Play key */
#define VK_ZOOM 0xFB /* Zoom key */
#define VK_NONAME 0xFC /* Reserved */
#define VK_PA1 0xFD /* PA1 key */
#define VK_OEM_CLEAR 0xFE /* Clear key */
#define VK_NONE 0xFF /* no key */
/**
* For East Asian Input Method Editors (IMEs)
@ -342,21 +358,6 @@
#define VK_DBE_CODEINPUT 0xFA /* Changes the mode to code input. */
#define VK_DBE_NOCODEINPUT 0xFB /* Changes the mode to no-code input. */
/**
* TODO: fix the following definitions
*/
#define VK_OEM_WSCTRL 0xFF
#define VK_OEM_FINISH 0xFF
#define VK_OEM_JUMP 0xFF
#define VK_OEM_BACKTAB 0xFF
#define VK_OEM_AUTO 0xFF
#define VK_OEM_PA3 0xFF
#define VK_OEM_RESET 0xFF
#define VK_OEM_PA2 0xFF
#define VK_POWER 0xFF
#define VK_LAUNCH_MEDIA_SELECT 0xFF
/*
* Virtual Scan Codes
*/

View File

@ -411,11 +411,15 @@ XKB_KEYNAME XKB_KEYNAME_TABLE[] =
{ "COMP", VK_APPS | KBDEXT },
{ "KPDV", VK_DIVIDE | KBDEXT },
{ "RCTL", VK_RCONTROL | KBDEXT },
{ "RALT", VK_RMENU | KBDEXT }
{ "RALT", VK_RMENU | KBDEXT },
/* Japanese */
{ "HENK", VK_CONVERT },
{ "MUHE", VK_NONCONVERT },
{ "HKTG", VK_DBE_KATAKANA },
// { "AE13", VK_BACKSLASH_JP }, // JP
// { "HKTG", VK_HIRAGANA }, // JP
// { "HENK", VK_CONVERT_JP }, // JP
// { "MUHE", VK_NONCONVERT_JP } // JP
// { "LVL3", 0x54}
};