summaryrefslogtreecommitdiffstats
path: root/ui
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
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')
-rw-r--r--ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc15
-rw-r--r--ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc6
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));