Commit 631eb392 authored by kpschoedel's avatar kpschoedel Committed by Commit bot

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}
parent ffc304e0
......@@ -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;
......
......@@ -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));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment