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; |