| 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 184048dafc4aa088efaa59a73ef96ca9d3d5ca6c..fa06858494c900ccc21d51a014f1f8850a748fe3 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:
|
| @@ -187,8 +50,11 @@ bool IsModifierLockKeyFromEvdevKey(unsigned int code) {
|
| } // namespace
|
|
|
| KeyboardEvdev::KeyboardEvdev(EventModifiersEvdev* modifiers,
|
| + KeyboardLayoutEngine* keyboard_layout_engine,
|
| const EventDispatchCallback& callback)
|
| - : callback_(callback), modifiers_(modifiers) {
|
| + : callback_(callback),
|
| + modifiers_(modifiers),
|
| + keyboard_layout_engine_(keyboard_layout_engine) {
|
| }
|
|
|
| KeyboardEvdev::~KeyboardEvdev() {
|
| @@ -225,17 +91,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 (!keyboard_layout_engine_->Lookup(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)));
|
| }
|
|
|
| // static
|
|
|