| Index: ui/events/keycodes/keyboard_code_conversion.cc
|
| diff --git a/ui/events/keycodes/keyboard_code_conversion.cc b/ui/events/keycodes/keyboard_code_conversion.cc
|
| index e31512b8c5e90efa0e642faead98db3f4f8cbf52..d32e98aa3376f15805dcb000f02f97196cf3f13b 100644
|
| --- a/ui/events/keycodes/keyboard_code_conversion.cc
|
| +++ b/ui/events/keycodes/keyboard_code_conversion.cc
|
| @@ -158,141 +158,16 @@ KeyboardCode DomCodeToUsLayoutKeyboardCode(DomCode dom_code) {
|
|
|
| } // anonymous namespace
|
|
|
| -base::char16 GetCharacterFromKeyCode(KeyboardCode key_code, int flags) {
|
| - ui::DomKey dom_key;
|
| +base::char16 DomCodeToUsLayoutCharacter(DomCode dom_code, int flags) {
|
| base::char16 character;
|
| - if (GetMeaningFromKeyCode(key_code, flags, &dom_key, &character))
|
| + DomKey dom_key;
|
| + KeyboardCode key_code;
|
| + if (DomCodeToUsLayoutMeaning(dom_code, flags, &dom_key, &character,
|
| + &key_code))
|
| return character;
|
| return 0;
|
| }
|
|
|
| -bool GetMeaningFromKeyCode(KeyboardCode key_code,
|
| - int flags,
|
| - DomKey* dom_key,
|
| - base::char16* character) {
|
| - const bool ctrl = (flags & EF_CONTROL_DOWN) != 0;
|
| - const bool shift = (flags & EF_SHIFT_DOWN) != 0;
|
| - const bool upper = shift ^ ((flags & EF_CAPS_LOCK_DOWN) != 0);
|
| -
|
| - // Control characters.
|
| - if (ctrl) {
|
| - // Following Windows behavior to map ctrl-a ~ ctrl-z to \x01 ~ \x1A.
|
| - if (key_code >= VKEY_A && key_code <= VKEY_Z) {
|
| - *character = static_cast<uint16>(key_code - VKEY_A + 1);
|
| - switch (key_code) {
|
| - case VKEY_H:
|
| - *dom_key = DomKey::BACKSPACE;
|
| - break;
|
| - case VKEY_I:
|
| - *dom_key = DomKey::TAB;
|
| - break;
|
| - case VKEY_J:
|
| - case VKEY_M:
|
| - *dom_key = DomKey::ENTER;
|
| - break;
|
| - default:
|
| - *dom_key = DomKey::CHARACTER;
|
| - break;
|
| - }
|
| - return true;
|
| - }
|
| - // Other control characters.
|
| - if (shift) {
|
| - // The following graphics characters require the shift key to input.
|
| - switch (key_code) {
|
| - // ctrl-@ maps to \x00 (Null byte)
|
| - case VKEY_2:
|
| - *dom_key = DomKey::CHARACTER;
|
| - *character = 0;
|
| - return true;
|
| - // ctrl-^ maps to \x1E (Record separator, Information separator two)
|
| - case VKEY_6:
|
| - *dom_key = DomKey::CHARACTER;
|
| - *character = 0x1E;
|
| - return true;
|
| - // ctrl-_ maps to \x1F (Unit separator, Information separator one)
|
| - case VKEY_OEM_MINUS:
|
| - *dom_key = DomKey::CHARACTER;
|
| - *character = 0x1F;
|
| - return true;
|
| - // Returns 0 for all other keys to avoid inputting unexpected chars.
|
| - default:
|
| - *dom_key = DomKey::UNIDENTIFIED;
|
| - *character = 0;
|
| - return false;
|
| - }
|
| - } else {
|
| - switch (key_code) {
|
| - // ctrl-[ maps to \x1B (Escape)
|
| - case VKEY_OEM_4:
|
| - *dom_key = DomKey::ESCAPE;
|
| - *character = 0x1B;
|
| - return true;
|
| - // ctrl-\ maps to \x1C (File separator, Information separator four)
|
| - case VKEY_OEM_5:
|
| - *dom_key = DomKey::CHARACTER;
|
| - *character = 0x1C;
|
| - return true;
|
| - // ctrl-] maps to \x1D (Group separator, Information separator three)
|
| - case VKEY_OEM_6:
|
| - *dom_key = DomKey::CHARACTER;
|
| - *character = 0x1D;
|
| - return true;
|
| - // ctrl-Enter maps to \x0A (Line feed)
|
| - case VKEY_RETURN:
|
| - *dom_key = DomKey::CHARACTER;
|
| - *character = 0x0A;
|
| - return true;
|
| - // Returns 0 for all other keys to avoid inputting unexpected chars.
|
| - default:
|
| - *dom_key = DomKey::UNIDENTIFIED;
|
| - *character = 0;
|
| - return false;
|
| - }
|
| - }
|
| - }
|
| -
|
| - // ASCII alphanumeric characters.
|
| - if (key_code >= VKEY_A && key_code <= VKEY_Z) {
|
| - *dom_key = DomKey::CHARACTER;
|
| - *character = static_cast<uint16>(key_code - VKEY_A + (upper ? 'A' : 'a'));
|
| - return true;
|
| - }
|
| - if (key_code >= VKEY_0 && key_code <= VKEY_9) {
|
| - *dom_key = DomKey::CHARACTER;
|
| - *character =
|
| - shift ? ")!@#$%^&*("[key_code - VKEY_0] : static_cast<uint16>(key_code);
|
| - return true;
|
| - }
|
| - if (key_code >= VKEY_NUMPAD0 && key_code <= VKEY_NUMPAD9) {
|
| - *dom_key = DomKey::CHARACTER;
|
| - *character = static_cast<uint16>(key_code - VKEY_NUMPAD0 + '0');
|
| - return true;
|
| - }
|
| -
|
| - // Function keys.
|
| - if (key_code >= VKEY_F1 && key_code <= VKEY_F24) {
|
| - *dom_key =
|
| - static_cast<DomKey>(key_code - VKEY_F1 + static_cast<int>(DomKey::F1));
|
| - *character = 0;
|
| - return true;
|
| - }
|
| -
|
| - // Other keys.
|
| - for (size_t i = 0; i < arraysize(kKeyboardCodeToMeaning); ++i) {
|
| - if (kKeyboardCodeToMeaning[i].key_code == key_code) {
|
| - const KeyboardCodeToMeaning* p = &kKeyboardCodeToMeaning[i];
|
| - *dom_key = p->key;
|
| - *character = (shift && p->shift_character) ? p->shift_character
|
| - : p->plain_character;
|
| - return true;
|
| - }
|
| - }
|
| - *dom_key = DomKey::UNIDENTIFIED;
|
| - *character = 0;
|
| - return false;
|
| -}
|
| -
|
| bool DomCodeToUsLayoutMeaning(DomCode dom_code,
|
| int flags,
|
| DomKey* out_dom_key,
|
|
|