Chromium Code Reviews| Index: ui/events/ozone/evdev/keyboard_evdev.cc |
| diff --git a/ui/events/ozone/evdev/keyboard_evdev.cc b/ui/events/ozone/evdev/keyboard_evdev.cc |
| index b9061e359cb136ebf961b4ce3deda0f35f837ad7..028d7ddb3001a906756bf5bf9189d4ecb24e26c9 100644 |
| --- a/ui/events/ozone/evdev/keyboard_evdev.cc |
| +++ b/ui/events/ozone/evdev/keyboard_evdev.cc |
| @@ -7,6 +7,8 @@ |
| #include "ui/events/event.h" |
| #include "ui/events/keycodes/dom4/keycode_converter.h" |
| #include "ui/events/ozone/evdev/event_modifiers_evdev.h" |
| +#include "ui/events/ozone/layout/keyboard_layout_engine.h" |
| +#include "ui/events/ozone/layout/keyboard_layout_engine_manager.h" |
| namespace ui { |
| @@ -14,145 +16,6 @@ namespace { |
| const int kXkbKeycodeOffset = 8; |
| -ui::KeyboardCode KeyboardCodeFromEvdevKey(unsigned int code) { |
| - static const ui::KeyboardCode kLinuxBaseKeyMap[] = { |
| - ui::VKEY_UNKNOWN, // KEY_RESERVED |
| - ui::VKEY_ESCAPE, // KEY_ESC |
| - ui::VKEY_1, // KEY_1 |
| - ui::VKEY_2, // KEY_2 |
| - ui::VKEY_3, // KEY_3 |
| - ui::VKEY_4, // KEY_4 |
| - ui::VKEY_5, // KEY_5 |
| - ui::VKEY_6, // KEY_6 |
| - ui::VKEY_7, // KEY_7 |
| - ui::VKEY_8, // KEY_8 |
| - ui::VKEY_9, // KEY_9 |
| - ui::VKEY_0, // KEY_0 |
| - ui::VKEY_OEM_MINUS, // KEY_MINUS |
| - ui::VKEY_OEM_PLUS, // KEY_EQUAL |
| - ui::VKEY_BACK, // KEY_BACKSPACE |
| - ui::VKEY_TAB, // KEY_TAB |
| - ui::VKEY_Q, // KEY_Q |
| - ui::VKEY_W, // KEY_W |
| - ui::VKEY_E, // KEY_E |
| - ui::VKEY_R, // KEY_R |
| - ui::VKEY_T, // KEY_T |
| - ui::VKEY_Y, // KEY_Y |
| - ui::VKEY_U, // KEY_U |
| - ui::VKEY_I, // KEY_I |
| - ui::VKEY_O, // KEY_O |
| - ui::VKEY_P, // KEY_P |
| - ui::VKEY_OEM_4, // KEY_LEFTBRACE |
| - ui::VKEY_OEM_6, // KEY_RIGHTBRACE |
| - ui::VKEY_RETURN, // KEY_ENTER |
| - ui::VKEY_CONTROL, // KEY_LEFTCTRL |
| - ui::VKEY_A, // KEY_A |
| - ui::VKEY_S, // KEY_S |
| - ui::VKEY_D, // KEY_D |
| - ui::VKEY_F, // KEY_F |
| - ui::VKEY_G, // KEY_G |
| - ui::VKEY_H, // KEY_H |
| - ui::VKEY_J, // KEY_J |
| - ui::VKEY_K, // KEY_K |
| - ui::VKEY_L, // KEY_L |
| - ui::VKEY_OEM_1, // KEY_SEMICOLON |
| - ui::VKEY_OEM_7, // KEY_APOSTROPHE |
| - ui::VKEY_OEM_3, // KEY_GRAVE |
| - ui::VKEY_SHIFT, // KEY_LEFTSHIFT |
| - ui::VKEY_OEM_5, // KEY_BACKSLASH |
| - ui::VKEY_Z, // KEY_Z |
| - ui::VKEY_X, // KEY_X |
| - ui::VKEY_C, // KEY_C |
| - ui::VKEY_V, // KEY_V |
| - ui::VKEY_B, // KEY_B |
| - ui::VKEY_N, // KEY_N |
| - ui::VKEY_M, // KEY_M |
| - ui::VKEY_OEM_COMMA, // KEY_COMMA |
| - ui::VKEY_OEM_PERIOD, // KEY_DOT |
| - ui::VKEY_OEM_2, // KEY_SLASH |
| - ui::VKEY_SHIFT, // KEY_RIGHTSHIFT |
| - ui::VKEY_MULTIPLY, // KEY_KPASTERISK |
| - ui::VKEY_MENU, // KEY_LEFTALT |
| - ui::VKEY_SPACE, // KEY_SPACE |
| - ui::VKEY_CAPITAL, // KEY_CAPSLOCK |
| - ui::VKEY_F1, // KEY_F1 |
| - ui::VKEY_F2, // KEY_F2 |
| - ui::VKEY_F3, // KEY_F3 |
| - ui::VKEY_F4, // KEY_F4 |
| - ui::VKEY_F5, // KEY_F5 |
| - ui::VKEY_F6, // KEY_F6 |
| - ui::VKEY_F7, // KEY_F7 |
| - ui::VKEY_F8, // KEY_F8 |
| - ui::VKEY_F9, // KEY_F9 |
| - ui::VKEY_F10, // KEY_F10 |
| - ui::VKEY_NUMLOCK, // KEY_NUMLOCK |
| - ui::VKEY_SCROLL, // KEY_SCROLLLOCK |
| - ui::VKEY_NUMPAD7, // KEY_KP7 |
| - ui::VKEY_NUMPAD8, // KEY_KP8 |
| - ui::VKEY_NUMPAD9, // KEY_KP9 |
| - ui::VKEY_SUBTRACT, // KEY_KPMINUS |
| - ui::VKEY_NUMPAD4, // KEY_KP4 |
| - ui::VKEY_NUMPAD5, // KEY_KP5 |
| - ui::VKEY_NUMPAD6, // KEY_KP6 |
| - ui::VKEY_ADD, // KEY_KPPLUS |
| - ui::VKEY_NUMPAD1, // KEY_KP1 |
| - ui::VKEY_NUMPAD2, // KEY_KP2 |
| - ui::VKEY_NUMPAD3, // KEY_KP3 |
| - ui::VKEY_NUMPAD0, // KEY_KP0 |
| - ui::VKEY_DECIMAL, // KEY_KPDOT |
| - ui::VKEY_UNKNOWN, // (unassigned) |
| - ui::VKEY_DBE_DBCSCHAR, // KEY_ZENKAKUHANKAKU |
| - ui::VKEY_OEM_102, // KEY_102ND |
| - ui::VKEY_F11, // KEY_F11 |
| - ui::VKEY_F12, // KEY_F12 |
| - ui::VKEY_UNKNOWN, // KEY_RO |
| - ui::VKEY_UNKNOWN, // KEY_KATAKANA |
| - ui::VKEY_UNKNOWN, // KEY_HIRAGANA |
| - ui::VKEY_CONVERT, // KEY_HENKAN |
| - ui::VKEY_UNKNOWN, // KEY_KATAKANAHIRAGANA |
| - ui::VKEY_NONCONVERT, // KEY_MUHENKAN |
| - ui::VKEY_UNKNOWN, // KEY_KPJPCOMMA |
| - ui::VKEY_RETURN, // KEY_KPENTER |
| - ui::VKEY_CONTROL, // KEY_RIGHTCTRL |
| - ui::VKEY_DIVIDE, // KEY_KPSLASH |
| - ui::VKEY_PRINT, // KEY_SYSRQ |
| - ui::VKEY_MENU, // KEY_RIGHTALT |
| - ui::VKEY_RETURN, // KEY_LINEFEED |
| - ui::VKEY_HOME, // KEY_HOME |
| - ui::VKEY_UP, // KEY_UP |
| - ui::VKEY_PRIOR, // KEY_PAGEUP |
| - ui::VKEY_LEFT, // KEY_LEFT |
| - ui::VKEY_RIGHT, // KEY_RIGHT |
| - ui::VKEY_END, // KEY_END |
| - ui::VKEY_DOWN, // KEY_DOWN |
| - ui::VKEY_NEXT, // KEY_PAGEDOWN |
| - ui::VKEY_INSERT, // KEY_INSERT |
| - ui::VKEY_DELETE, // KEY_DELETE |
| - ui::VKEY_UNKNOWN, // KEY_MACRO |
| - ui::VKEY_VOLUME_MUTE, // KEY_MUTE |
| - ui::VKEY_VOLUME_DOWN, // KEY_VOLUMEDOWN |
| - ui::VKEY_VOLUME_UP, // KEY_VOLUMEUP |
| - ui::VKEY_POWER, // KEY_POWER |
| - ui::VKEY_OEM_PLUS, // KEY_KPEQUAL |
| - ui::VKEY_UNKNOWN, // KEY_KPPLUSMINUS |
| - ui::VKEY_PAUSE, // KEY_PAUSE |
| - ui::VKEY_MEDIA_LAUNCH_APP1, // KEY_SCALE |
| - ui::VKEY_DECIMAL, // KEY_KPCOMMA |
| - ui::VKEY_HANGUL, // KEY_HANGEUL |
| - ui::VKEY_HANJA, // KEY_HANJA |
| - ui::VKEY_UNKNOWN, // KEY_YEN |
| - ui::VKEY_LWIN, // KEY_LEFTMETA |
| - ui::VKEY_RWIN, // KEY_RIGHTMETA |
| - ui::VKEY_APPS, // KEY_COMPOSE |
| - }; |
| - |
| - if (code < arraysize(kLinuxBaseKeyMap)) |
| - return kLinuxBaseKeyMap[code]; |
| - |
| - LOG(ERROR) << "Unknown key code: " << code; |
| - return ui::VKEY_UNKNOWN; |
| -} |
| - |
| int ModifierFromEvdevKey(unsigned int code) { |
| switch (code) { |
| case KEY_CAPSLOCK: |
| @@ -225,17 +88,24 @@ void KeyboardEvdev::UpdateModifier(unsigned int key, bool down) { |
| } |
| void KeyboardEvdev::DispatchKey(unsigned int key, bool down) { |
| - ui::KeyboardCode code = KeyboardCodeFromEvdevKey(key); |
| + DomCode dom_code = |
| + KeycodeConverter::NativeKeycodeToDomCode(key + kXkbKeycodeOffset); |
| + // DomCode constants are not included here because of conflicts with |
| + // evdev preprocessor macros. |
| + if (!static_cast<int>(dom_code)) |
| + return; |
| int flags = modifiers_->GetModifierFlags(); |
| - |
| - if (code == VKEY_UNKNOWN) |
| + DomKey dom_key; |
| + KeyboardCode key_code; |
| + uint16 character; |
| + if (!KeyboardLayoutEngineManager::GetKeyboardLayoutEngine()->Lookup( |
|
spang
2014/12/02 18:38:26
Can you add a KeyboardLayoutEngineManager* member
kpschoedel
2014/12/02 19:34:20
Done.
|
| + dom_code, flags, &dom_key, &character, &key_code)) { |
| return; |
| + } |
| - callback_.Run(make_scoped_ptr(new KeyEvent( |
| - down ? ET_KEY_PRESSED : ET_KEY_RELEASED, |
| - code, |
| - KeycodeConverter::NativeKeycodeToDomCode(key + kXkbKeycodeOffset), |
| - flags))); |
| + callback_.Run(make_scoped_ptr( |
| + new KeyEvent(down ? ET_KEY_PRESSED : ET_KEY_RELEASED, key_code, dom_code, |
| + flags, dom_key, character))); |
| } |
| } // namespace ui |