Chromium Code Reviews| Index: ui/base/ime/chromeos/ime_keymap.cc |
| diff --git a/ui/base/ime/chromeos/ime_keymap.cc b/ui/base/ime/chromeos/ime_keymap.cc |
| index 16b32f328ad8ee2d98f6df0da022135e5d7c2dbd..2aaf645ffbf9deab9b8eae9cda152dd6fa98be5e 100644 |
| --- a/ui/base/ime/chromeos/ime_keymap.cc |
| +++ b/ui/base/ime/chromeos/ime_keymap.cc |
| @@ -4,98 +4,177 @@ |
| #include "ui/base/ime/chromeos/ime_keymap.h" |
| -#define XK_MISCELLANY |
| -#include <X11/keysymdef.h> |
| -#include <X11/XF86keysym.h> |
| +#include <map> |
| + |
| +#include "base/lazy_instance.h" |
| namespace ui { |
| -std::string FromXKeycodeToKeyValue(int keyval) { |
| - // TODO: Ensure all keys are supported. |
| - switch (keyval) { |
| - case XK_Escape: |
| - return "Esc"; |
| - case XK_F1: |
| - case XF86XK_Back: |
| - return "HistoryBack"; |
| - case XK_F2: |
| - case XF86XK_Forward: |
| - return "HistoryForward"; |
| - case XK_F3: |
| - case XF86XK_Reload: |
| - return "BrowserRefresh"; |
| - case XK_F4: |
| - case XF86XK_LaunchB: |
| - return "ChromeOSFullscreen"; // TODO: Check this value |
| - case XK_F5: |
| - case XF86XK_LaunchA: |
| - return "ChromeOSSwitchWindow"; // TODO: Check this value |
| - case XK_F6: |
| - case XF86XK_MonBrightnessDown: |
| - return "BrightnessDown"; |
| - case XK_F7: |
| - case XF86XK_MonBrightnessUp: |
| - return "BrightnessUp"; |
| - case XK_F8: |
| - case XF86XK_AudioMute: |
| - return "AudioVolumeMute"; |
| - case XK_F9: |
| - case XF86XK_AudioLowerVolume: |
| - return "AudioVolumeDown"; |
| - case XK_F10: |
| - case XF86XK_AudioRaiseVolume: |
| - return "AudioVolumeUp"; |
| - case XK_BackSpace: |
| - return "Backspace"; |
| - case XK_Delete: |
| - case XK_KP_Delete: |
| - return "Delete"; |
| - case XK_Tab: |
| - return "Tab"; |
| - case XK_KP_Enter: |
| - case XK_Return: |
| - return "Enter"; |
| - case XK_Meta_L: |
| - return "BrowserSearch"; |
| - case XK_Up: |
| - case XK_KP_Up: |
| - return "Up"; |
| - case XK_Down: |
| - case XK_KP_Down: |
| - return "Down"; |
| - case XK_Left: |
| - case XK_KP_Left: |
| - return "Left"; |
| - case XK_Right: |
| - case XK_KP_Right: |
| - return "Right"; |
| - case XK_Page_Up: |
| - return "PageUp"; |
| - case XK_Page_Down: |
| - return "PageDown"; |
| - case XK_Home: |
| - return "Home"; |
| - case XK_End: |
| - return "End"; |
| - case XK_Shift_L: |
| - case XK_Shift_R: |
| - return "Shift"; |
| - case XK_Alt_L: |
| - case XK_Alt_R: |
| - return "Alt"; |
| - case XK_Control_L: |
| - case XK_Control_R: |
| - return "Ctrl"; |
| - case XK_Caps_Lock: |
| - return "CapsLock"; |
| - default: { |
| - // TODO: Properly support unicode characters. |
| - char value[2]; |
| - value[0] = keyval; |
| - value[1] = '\0'; |
| - return value; |
| - } |
| +namespace { |
| + |
| +const struct KeyCodeTable { |
| + KeyboardCode keyboard_code; |
| + const char* dom_code; |
| +} kKeyCodeTable[] = { |
| + {VKEY_BACK, "Backspace"}, |
| + {VKEY_TAB, "Tab"}, |
| + {VKEY_RETURN, "Enter"}, |
| + {VKEY_MENU, "ContextMenu"}, |
| + {VKEY_PAUSE, "Pause"}, |
| + {VKEY_CAPITAL, "CapsLock"}, |
| + {VKEY_KANA, "KanaMode"}, |
| + {VKEY_HANGUL, "HangulMode"}, |
| + {VKEY_HANJA, "Hanja"}, |
| + {VKEY_KANJI, "Kanji"}, |
| + {VKEY_ESCAPE, "Escape"}, |
| + {VKEY_CONVERT, "Convert"}, |
| + {VKEY_NONCONVERT, "NoConvert"}, |
| + {VKEY_SPACE, "Space"}, |
| + {VKEY_END, "End"}, |
| + {VKEY_HOME, "Home"}, |
| + {VKEY_LEFT, "ArrowLeft"}, |
| + {VKEY_UP, "ArrowUp"}, |
| + {VKEY_RIGHT, "ArrowRight"}, |
| + {VKEY_DOWN, "ArrowDown"}, |
| + {VKEY_PRINT, "PrintScreen"}, |
| + {VKEY_INSERT, "Insert"}, |
| + {VKEY_DELETE, "Delete"}, |
| + {VKEY_HELP, "Help"}, |
| + {VKEY_0, "Digit0"}, |
| + {VKEY_1, "Digit1"}, |
| + {VKEY_2, "Digit2"}, |
| + {VKEY_3, "Digit3"}, |
| + {VKEY_4, "Digit4"}, |
| + {VKEY_5, "Digit5"}, |
| + {VKEY_6, "Digit6"}, |
| + {VKEY_7, "Digit7"}, |
| + {VKEY_8, "Digit8"}, |
| + {VKEY_9, "Digit9"}, |
| + {VKEY_A, "KeyA"}, |
| + {VKEY_B, "KeyB"}, |
| + {VKEY_C, "KeyC"}, |
| + {VKEY_D, "KeyD"}, |
| + {VKEY_E, "KeyE"}, |
| + {VKEY_F, "KeyF"}, |
| + {VKEY_G, "KeyG"}, |
| + {VKEY_H, "KeyH"}, |
| + {VKEY_I, "KeyI"}, |
| + {VKEY_J, "KeyJ"}, |
| + {VKEY_K, "KeyK"}, |
| + {VKEY_L, "KeyL"}, |
| + {VKEY_M, "KeyM"}, |
| + {VKEY_N, "KeyN"}, |
| + {VKEY_O, "KeyO"}, |
| + {VKEY_P, "KeyP"}, |
| + {VKEY_Q, "KeyQ"}, |
| + {VKEY_R, "KeyR"}, |
| + {VKEY_S, "KeyS"}, |
| + {VKEY_T, "KeyT"}, |
| + {VKEY_U, "KeyU"}, |
| + {VKEY_V, "KeyV"}, |
| + {VKEY_W, "KeyW"}, |
| + {VKEY_X, "KeyX"}, |
| + {VKEY_Y, "KeyY"}, |
| + {VKEY_Z, "KeyZ"}, |
| + {VKEY_LWIN, "OSLeft"}, |
| + {VKEY_RWIN, "OSRight"}, |
| + {VKEY_NUMPAD0, "Numpad0"}, |
| + {VKEY_NUMPAD1, "Numpad1"}, |
| + {VKEY_NUMPAD2, "Numpad2"}, |
| + {VKEY_NUMPAD3, "Numpad3"}, |
| + {VKEY_NUMPAD4, "Numpad4"}, |
| + {VKEY_NUMPAD5, "Numpad5"}, |
| + {VKEY_NUMPAD6, "Numpad6"}, |
| + {VKEY_NUMPAD7, "Numpad7"}, |
| + {VKEY_NUMPAD8, "Numpad8"}, |
| + {VKEY_NUMPAD9, "Numpad9"}, |
| + {VKEY_MULTIPLY, "NumpadMultiply"}, |
| + {VKEY_ADD, "NumpadAdd"}, |
| + {VKEY_SUBTRACT, "NumpadSubtract"}, |
| + {VKEY_DECIMAL, "NumpadDecimal"}, |
| + {VKEY_DIVIDE, "NumpadDivide"}, |
| + {VKEY_F1, "F1"}, |
| + {VKEY_F2, "F2"}, |
| + {VKEY_F3, "F3"}, |
| + {VKEY_F4, "F4"}, |
| + {VKEY_F5, "F5"}, |
| + {VKEY_F6, "F6"}, |
| + {VKEY_F7, "F7"}, |
| + {VKEY_F8, "F8"}, |
| + {VKEY_F9, "F9"}, |
| + {VKEY_F10, "F10"}, |
| + {VKEY_F11, "F11"}, |
| + {VKEY_F12, "F12"}, |
| + {VKEY_F13, "F13"}, |
| + {VKEY_F14, "F14"}, |
| + {VKEY_F15, "F15"}, |
| + {VKEY_F16, "F16"}, |
| + {VKEY_F17, "F17"}, |
| + {VKEY_F18, "F18"}, |
| + {VKEY_F19, "F19"}, |
| + {VKEY_F20, "F20"}, |
| + {VKEY_F21, "F21"}, |
| + {VKEY_F22, "F22"}, |
| + {VKEY_F23, "F23"}, |
| + {VKEY_F24, "F24"}, |
| + {VKEY_NUMLOCK, "NumLock"}, |
| + {VKEY_SCROLL, "ScrollLock"}, |
| + {VKEY_LSHIFT, "ShiftLeft"}, |
| + {VKEY_RSHIFT, "ShiftRight"}, |
| + {VKEY_LCONTROL, "CtrlLeft"}, |
| + {VKEY_RCONTROL, "CtrlRight"}, |
| + {VKEY_LMENU, "AltLeft"}, |
| + {VKEY_RMENU, "AltRight"}, |
| + {VKEY_BROWSER_BACK, "BrowserBack"}, |
| + {VKEY_BROWSER_FORWARD, "BrowserForward"}, |
| + {VKEY_BROWSER_REFRESH, "BrowserRefresh"}, |
| + {VKEY_BROWSER_STOP, "BrowserStop"}, |
| + {VKEY_BROWSER_SEARCH, "BrowserSearch"}, |
| + {VKEY_BROWSER_HOME, "BrowserHome"}, |
| + {VKEY_VOLUME_MUTE, "VolumeMute"}, |
| + {VKEY_VOLUME_DOWN, "VolumeDown"}, |
| + {VKEY_VOLUME_UP, "VolumeUp"}, |
| + {VKEY_MEDIA_NEXT_TRACK, "MediaTrackNext"}, |
| + {VKEY_MEDIA_PREV_TRACK, "MediaTrackPrevious"}, |
| + {VKEY_MEDIA_STOP, "MediaStop"}, |
| + {VKEY_MEDIA_PLAY_PAUSE, "MediaPlayPause"}, |
| + {VKEY_MEDIA_LAUNCH_MAIL, "LaunchMail"}, |
| + {VKEY_OEM_1, "Semicolon"}, |
| + {VKEY_OEM_PLUS, "Equal"}, |
| + {VKEY_OEM_COMMA, "Comma"}, |
| + {VKEY_OEM_MINUS, "Minus"}, |
| + {VKEY_OEM_PERIOD, "Period"}, |
| + {VKEY_OEM_2, "Slash"}, |
| + {VKEY_OEM_3, "Backquote"}, |
| + {VKEY_OEM_4, "BracketLeft"}, |
| + {VKEY_OEM_5, "Backslash"}, |
| + {VKEY_OEM_6, "BracketRight"}, |
| + {VKEY_OEM_7, "Quote"}}; |
| + |
| +class KeyCodeMap { |
| + public: |
| + KeyCodeMap() { |
| + for (size_t i = 0; i < arraysize(kKeyCodeTable); ++i) |
| + map_[kKeyCodeTable[i].dom_code] = kKeyCodeTable[i].keyboard_code; |
| + } |
| + |
| + KeyboardCode GetKeyboardCode(const std::string& dom_code) const { |
| + std::map<std::string, KeyboardCode>::const_iterator it = |
| + map_.find(dom_code); |
| + return (it == map_.end()) ? VKEY_UNKNOWN : it->second; |
| } |
| + |
| + private: |
| + std::map<std::string, KeyboardCode> map_; |
| +}; |
| + |
| +base::LazyInstance<KeyCodeMap>::Leaky |
|
Yuki
2014/06/16 08:52:20
nit: Breaking line between variable and initialize
Shu Chen
2014/06/16 08:55:10
Done.
|
| + g_keycode_map = LAZY_INSTANCE_INITIALIZER; |
| + |
| +} // namespace |
| + |
| +KeyboardCode DomKeycodeToKeyboardCode(const std::string& code) { |
| + return g_keycode_map.Get().GetKeyboardCode(code); |
| } |
| } // namespace ui |