| Index: ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
|
| diff --git a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
|
| index d507d444ca4ec3d6b4076f5f4a7027069db83159..4a37e38893c9c6c823b7c2374934b299f5ee99d4 100644
|
| --- a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
|
| +++ b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
|
| @@ -31,10 +31,15 @@ typedef base::Callback<void(const std::string&,
|
| scoped_ptr<char, base::FreeDeleter>)>
|
| LoadKeymapCallback;
|
|
|
| -KeyboardCode AlphanumericKeyboardCode(base::char16 character) {
|
| +KeyboardCode AlphanumericKeyboardCode(xkb_keysym_t xkb_keysym,
|
| + base::char16 character) {
|
| // Plain ASCII letters and digits map directly to VKEY values.
|
| - if ((character >= '0') && (character <= '9'))
|
| - return static_cast<KeyboardCode>(VKEY_0 + character - '0');
|
| + if ((character >= '0') && (character <= '9')) {
|
| + int zero = ((xkb_keysym >= XKB_KEY_KP_0) && (xkb_keysym <= XKB_KEY_KP_9))
|
| + ? VKEY_NUMPAD0
|
| + : VKEY_0;
|
| + return static_cast<KeyboardCode>(zero + character - '0');
|
| + }
|
| if ((character >= 'a') && (character <= 'z'))
|
| return static_cast<KeyboardCode>(VKEY_A + character - 'a');
|
| if ((character >= 'A') && (character <= 'Z'))
|
| @@ -775,7 +780,7 @@ bool XkbKeyboardLayoutEngine::Lookup(DomCode dom_code,
|
| }
|
|
|
| *dom_key = DomKey::FromCharacter(character);
|
| - *key_code = AlphanumericKeyboardCode(character);
|
| + *key_code = AlphanumericKeyboardCode(xkb_keysym, character);
|
| if (*key_code == VKEY_UNKNOWN) {
|
| *key_code = DifficultKeyboardCode(dom_code, flags, xkb_keycode, xkb_flags,
|
| xkb_keysym, character);
|
| @@ -876,7 +881,7 @@ KeyboardCode XkbKeyboardLayoutEngine::DifficultKeyboardCode(
|
| return NonPrintableDomKeyToKeyboardCode(plain_key);
|
|
|
| // Plain ASCII letters and digits map directly to VKEY values.
|
| - KeyboardCode key_code = AlphanumericKeyboardCode(plain_character);
|
| + KeyboardCode key_code = AlphanumericKeyboardCode(xkb_keysym, plain_character);
|
| if (key_code != VKEY_UNKNOWN)
|
| return key_code;
|
|
|
|
|