summaryrefslogtreecommitdiffstats
path: root/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
diff options
context:
space:
mode:
authorkpschoedel <kpschoedel@chromium.org>2016-03-17 08:00:37 -0700
committerCommit bot <commit-bot@chromium.org>2016-03-17 15:02:11 +0000
commit631eb39240d4f2f2bb9c764f1adc225e844791d5 (patch)
tree556a31c8f2bcfbaff26af59725a90bab46e29602 /ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
parentffc304e0bee28877e8dfc4d832673f391a005582 (diff)
downloadchromium_src-631eb39240d4f2f2bb9c764f1adc225e844791d5.zip
chromium_src-631eb39240d4f2f2bb9c764f1adc225e844791d5.tar.gz
chromium_src-631eb39240d4f2f2bb9c764f1adc225e844791d5.tar.bz2
Generate located Windows keycodes for number pad keys under Ozone
Makes Ozone's XKB keyboard layout support generate Windows keycodes VKEY_NUMPAD0 through VKEY_NUMPAD9 for number pad keys, rather than VKEY_0 through VKEY_9, to match the X11 behaviour. BUG=574458 Review URL: https://codereview.chromium.org/1566463002 Cr-Commit-Position: refs/heads/master@{#381709}
Diffstat (limited to 'ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc')
-rw-r--r--ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc15
1 files changed, 10 insertions, 5 deletions
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 eb072d0..9367b62 100644
--- a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
+++ b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
@@ -33,10 +33,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'))
@@ -783,7 +788,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);
@@ -884,7 +889,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;