| 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..c6686094a44d8bc901c279a875fe70c9fba0b571 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 g_keycode_map =
|
| + LAZY_INSTANCE_INITIALIZER;
|
| +
|
| +} // namespace
|
| +
|
| +KeyboardCode DomKeycodeToKeyboardCode(const std::string& code) {
|
| + return g_keycode_map.Get().GetKeyboardCode(code);
|
| }
|
|
|
| } // namespace ui
|
|
|