Index: app/keyboard_code_conversion_x.cc |
diff --git a/app/keyboard_code_conversion_x.cc b/app/keyboard_code_conversion_x.cc |
index 679423b4aaad2d5eb0dd9d5060f5f000a24d676f..d33cc193695db174645e34f1a3594882fa8ad692 100644 |
--- a/app/keyboard_code_conversion_x.cc |
+++ b/app/keyboard_code_conversion_x.cc |
@@ -15,15 +15,23 @@ namespace app { |
KeyboardCode KeyboardCodeFromXKeyEvent(XEvent* xev) { |
KeySym keysym = XLookupKeysym(&xev->xkey, 0); |
+ // Consult GDK key translation (in WindowsKeyCodeForGdkKeyCode) for details |
+ // about the following translations. |
+ |
// TODO(sad): Have |keysym| go through the X map list? |
switch (keysym) { |
case XK_BackSpace: |
return VKEY_BACK; |
+ case XK_Delete: |
+ case XK_KP_Delete: |
+ return VKEY_DELETE; |
case XK_Tab: |
+ case XK_KP_Tab: |
return VKEY_TAB; |
case XK_Linefeed: |
case XK_Return: |
+ case XK_KP_Enter: |
return VKEY_RETURN; |
case XK_Clear: |
return VKEY_CLEAR; |
@@ -36,6 +44,12 @@ KeyboardCode KeyboardCodeFromXKeyEvent(XEvent* xev) { |
case XK_End: |
case XK_KP_End: |
return VKEY_END; |
+ case XK_Page_Up: |
+ case XK_KP_Page_Up: |
+ return VKEY_PRIOR; |
+ case XK_Page_Down: |
+ case XK_KP_Page_Down: |
+ return VKEY_NEXT; |
case XK_Left: |
case XK_KP_Left: |
return VKEY_LEFT; |
@@ -48,10 +62,6 @@ KeyboardCode KeyboardCodeFromXKeyEvent(XEvent* xev) { |
case XK_Up: |
case XK_KP_Up: |
return VKEY_UP; |
- case XK_Control_L: |
- return VKEY_LCONTROL; |
- case XK_Control_R: |
- return VKEY_RCONTROL; |
case XK_Escape: |
return VKEY_ESCAPE; |
case XK_A: |
@@ -153,7 +163,115 @@ KeyboardCode KeyboardCodeFromXKeyEvent(XEvent* xev) { |
case XK_9: |
return VKEY_9; |
- // TODO(sad): A lot of keycodes are still missing. |
+ case XK_multiply: |
+ case XK_KP_Multiply: |
+ return VKEY_MULTIPLY; |
+ case XK_KP_Add: |
+ return VKEY_ADD; |
+ case XK_KP_Separator: |
+ return VKEY_SEPARATOR; |
+ case XK_KP_Subtract: |
+ return VKEY_SUBTRACT; |
+ case XK_KP_Decimal: |
+ return VKEY_DECIMAL; |
+ case XK_KP_Divide: |
+ return VKEY_DIVIDE; |
+ case XK_equal: |
+ case XK_plus: |
+ return VKEY_OEM_PLUS; |
+ case XK_comma: |
+ case XK_less: |
+ return VKEY_OEM_COMMA; |
+ case XK_minus: |
+ case XK_underscore: |
+ return VKEY_OEM_MINUS; |
+ case XK_greater: |
+ case XK_period: |
+ return VKEY_OEM_PERIOD; |
+ case XK_colon: |
+ case XK_semicolon: |
+ return VKEY_OEM_1; |
+ case XK_question: |
+ case XK_slash: |
+ return VKEY_OEM_2; |
+ case XK_asciitilde: |
+ case XK_quoteleft: |
+ return VKEY_OEM_3; |
+ case XK_bracketleft: |
+ case XK_braceleft: |
+ return VKEY_OEM_4; |
+ case XK_backslash: |
+ case XK_bar: |
+ return VKEY_OEM_5; |
+ case XK_bracketright: |
+ case XK_braceright: |
+ return VKEY_OEM_6; |
+ case XK_quoteright: |
+ case XK_quotedbl: |
+ return VKEY_OEM_7; |
+ case XK_Shift_L: |
+ case XK_Shift_R: |
+ return VKEY_SHIFT; |
+ case XK_Control_L: |
+ case XK_Control_R: |
+ return VKEY_CONTROL; |
+ case XK_Alt_L: |
+ case XK_Alt_R: |
+ return VKEY_MENU; |
+ case XK_Pause: |
+ return VKEY_PAUSE; |
+ case XK_Caps_Lock: |
+ return VKEY_CAPITAL; |
+ case XK_Num_Lock: |
+ return VKEY_NUMLOCK; |
+ case XK_Scroll_Lock: |
+ return VKEY_SCROLL; |
+ case XK_Select: |
+ return VKEY_SELECT; |
+ case XK_Print: |
+ return VKEY_PRINT; |
+ case XK_Execute: |
+ return VKEY_EXECUTE; |
+ case XK_Insert: |
+ case XK_KP_Insert: |
+ return VKEY_INSERT; |
+ case XK_Help: |
+ return VKEY_HELP; |
+ case XK_Meta_L: |
+ case XK_Super_L: |
+ return VKEY_LWIN; |
+ case XK_Meta_R: |
+ case XK_Super_R: |
+ return VKEY_RWIN; |
+ case XK_Menu: |
+ return VKEY_APPS; |
+ case XK_F1: |
+ case XK_F2: |
+ case XK_F3: |
+ case XK_F4: |
+ case XK_F5: |
+ case XK_F6: |
+ case XK_F7: |
+ case XK_F8: |
+ case XK_F9: |
+ case XK_F10: |
+ case XK_F11: |
+ case XK_F12: |
+ case XK_F13: |
+ case XK_F14: |
+ case XK_F15: |
+ case XK_F16: |
+ case XK_F17: |
+ case XK_F18: |
+ case XK_F19: |
+ case XK_F20: |
+ case XK_F21: |
+ case XK_F22: |
+ case XK_F23: |
+ case XK_F24: |
+ return static_cast<app::KeyboardCode>(VKEY_F1 + (keysym - XK_F1)); |
+ |
+ // TODO(sad): some keycodes are still missing. |
} |
DLOG(WARNING) << "Unknown keycode: " << keysym; |