diff options
author | kpschoedel <kpschoedel@chromium.org> | 2016-03-17 08:00:37 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-17 15:02:11 +0000 |
commit | 631eb39240d4f2f2bb9c764f1adc225e844791d5 (patch) | |
tree | 556a31c8f2bcfbaff26af59725a90bab46e29602 /ui | |
parent | ffc304e0bee28877e8dfc4d832673f391a005582 (diff) | |
download | chromium_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')
-rw-r--r-- | ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc | 15 | ||||
-rw-r--r-- | ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc | 6 |
2 files changed, 15 insertions, 6 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; diff --git a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc index ed59617..b8488af20 100644 --- a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc +++ b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc @@ -45,6 +45,7 @@ class VkTestXkbKeyboardLayoutEngine : public XkbKeyboardLayoutEngine { struct KeysymEntry { DomCode dom_code; xkb_keysym_t keysym; + base::char16 character; }; struct RuleNames { @@ -128,7 +129,7 @@ class VkTestXkbKeyboardLayoutEngine : public XkbKeyboardLayoutEngine { return false; } *xkb_keysym = keysym_entry_->keysym; - *character = 0; + *character = keysym_entry_->character; return true; } return false; @@ -815,6 +816,9 @@ TEST_F(XkbLayoutEngineVkTest, KeyboardCodeForNonPrintable) { {{DomCode::ENTER, XKB_KEY_Return}, VKEY_RETURN}, {{DomCode::NUMPAD_ENTER, XKB_KEY_KP_Enter}, VKEY_RETURN}, {{DomCode::SLEEP, XKB_KEY_XF86Sleep}, VKEY_SLEEP}, + // Verify that number pad digits produce located VKEY codes. + {{DomCode::NUMPAD0, XKB_KEY_KP_0, '0'}, VKEY_NUMPAD0}, + {{DomCode::NUMPAD9, XKB_KEY_KP_9, '9'}, VKEY_NUMPAD9}, }; for (const auto& e : kVkeyTestCase) { SCOPED_TRACE(static_cast<int>(e.test.dom_code)); |