| Index: ui/base/keycodes/keyboard_code_conversion_x.cc
|
| diff --git a/ui/base/keycodes/keyboard_code_conversion_x.cc b/ui/base/keycodes/keyboard_code_conversion_x.cc
|
| index 494caffcc687bbe5ea93e2a1de175908855d60a2..e2718b7c5ae4490af179f92b281a46db0477a55b 100644
|
| --- a/ui/base/keycodes/keyboard_code_conversion_x.cc
|
| +++ b/ui/base/keycodes/keyboard_code_conversion_x.cc
|
| @@ -16,8 +16,10 @@ namespace ui {
|
|
|
| // Get an ui::KeyboardCode from an X keyevent
|
| KeyboardCode KeyboardCodeFromXKeyEvent(XEvent* xev) {
|
| - KeySym keysym = XLookupKeysym(&xev->xkey, 0);
|
| -
|
| + // XLookupKeysym does not take into consideration the state of the lock/shift
|
| + // etc. keys. So it is necessary to use XLookupString instead.
|
| + KeySym keysym;
|
| + XLookupString(&xev->xkey, NULL, 0, &keysym, NULL);
|
| KeyboardCode keycode = KeyboardCodeFromXKeysym(keysym);
|
| if (keycode == VKEY_UNKNOWN) {
|
| keysym = DefaultXKeysymFromHardwareKeycode(xev->xkey.keycode);
|
| @@ -155,26 +157,30 @@ KeyboardCode KeyboardCodeFromXKeysym(unsigned int keysym) {
|
| case XK_Z:
|
| case XK_z:
|
| return VKEY_Z;
|
| +
|
| case XK_0:
|
| - return VKEY_0;
|
| case XK_1:
|
| - return VKEY_1;
|
| case XK_2:
|
| - return VKEY_2;
|
| case XK_3:
|
| - return VKEY_3;
|
| case XK_4:
|
| - return VKEY_4;
|
| case XK_5:
|
| - return VKEY_5;
|
| case XK_6:
|
| - return VKEY_6;
|
| case XK_7:
|
| - return VKEY_7;
|
| case XK_8:
|
| - return VKEY_8;
|
| case XK_9:
|
| - return VKEY_9;
|
| + return static_cast<KeyboardCode>(VKEY_0 + (keysym - XK_0));
|
| +
|
| + case XK_KP_0:
|
| + case XK_KP_1:
|
| + case XK_KP_2:
|
| + case XK_KP_3:
|
| + case XK_KP_4:
|
| + case XK_KP_5:
|
| + case XK_KP_6:
|
| + case XK_KP_7:
|
| + case XK_KP_8:
|
| + case XK_KP_9:
|
| + return static_cast<KeyboardCode>(VKEY_NUMPAD0 + (keysym - XK_KP_0));
|
|
|
| case XK_multiply:
|
| case XK_KP_Multiply:
|
|
|