Plumb PinchVirtualViewport layers into CC.
[chromium-blink-merge.git] / chromeos / ime / ibus_keymap.cc
blob7f9be5a53ce0e224470aa6528f55ca443a93020d
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chromeos/ime/ibus_keymap.h"
7 #define XK_MISCELLANY
8 #include <X11/keysymdef.h>
9 #include <X11/XF86keysym.h>
11 namespace chromeos {
12 namespace input_method {
14 std::string GetIBusKey(int keyval) {
15 // TODO: Ensure all keys are supported.
16 switch (keyval) {
17 case XK_Escape:
18 return "Esc";
19 case XK_F1:
20 case XF86XK_Back:
21 return "HistoryBack";
22 case XK_F2:
23 case XF86XK_Forward:
24 return "HistoryForward";
25 case XK_F3:
26 case XF86XK_Reload:
27 return "BrowserRefresh";
28 case XK_F4:
29 case XF86XK_LaunchB:
30 return "ChromeOSFullscreen"; // TODO: Check this value
31 case XK_F5:
32 case XF86XK_LaunchA:
33 return "ChromeOSSwitchWindow"; // TODO: Check this value
34 case XK_F6:
35 case XF86XK_MonBrightnessDown:
36 return "BrightnessDown";
37 case XK_F7:
38 case XF86XK_MonBrightnessUp:
39 return "BrightnessUp";
40 case XK_F8:
41 case XF86XK_AudioMute:
42 return "AudioVolumeMute";
43 case XK_F9:
44 case XF86XK_AudioLowerVolume:
45 return "AudioVolumeDown";
46 case XK_F10:
47 case XF86XK_AudioRaiseVolume:
48 return "AudioVolumeUp";
49 case XK_BackSpace:
50 return "Backspace";
51 case XK_Delete:
52 case XK_KP_Delete:
53 return "Delete";
54 case XK_Tab:
55 return "Tab";
56 case XK_KP_Enter:
57 case XK_Return:
58 return "Enter";
59 case XK_Meta_L:
60 return "BrowserSearch";
61 case XK_Up:
62 case XK_KP_Up:
63 return "Up";
64 case XK_Down:
65 case XK_KP_Down:
66 return "Down";
67 case XK_Left:
68 case XK_KP_Left:
69 return "Left";
70 case XK_Right:
71 case XK_KP_Right:
72 return "Right";
73 case XK_Page_Up:
74 return "PageUp";
75 case XK_Page_Down:
76 return "PageDown";
77 case XK_Home:
78 return "Home";
79 case XK_End:
80 return "End";
81 case XK_Shift_L:
82 case XK_Shift_R:
83 return "Shift";
84 case XK_Alt_L:
85 case XK_Alt_R:
86 return "Alt";
87 case XK_Control_L:
88 case XK_Control_R:
89 return "Ctrl";
90 case XK_Caps_Lock:
91 return "CapsLock";
92 default: {
93 // TODO: Properly support unicode characters.
94 char value[2];
95 value[0] = keyval;
96 value[1] = '\0';
97 return value;
102 // We should send KeyCode as string to meet DOM Level 4 event specification
103 // proposal. https://dvcs.w3.org/hg/d4e/raw-file/tip/source_respec.htm
104 // The original spec is 1:1 mapping with USB keycode, but for the Extension IME,
105 // mapping with XKB keycode is sufficient, because it works only on Chrome OS.
106 // We have to have own mapping because We can't use WebKit component in
107 // Extension IME,
108 // TODO(nona): Use if the original spec is introduced.
109 std::string GetIBusKeyCode(uint16 keycode) {
110 switch (keycode) {
111 // Function keys
112 case 0x0009: return "Esc";
113 case 0x0043: return "F1";
114 case 0x0044: return "F2";
115 case 0x0045: return "F3";
116 case 0x0046: return "F4";
117 case 0x0047: return "F5";
118 case 0x0048: return "F6";
119 case 0x0049: return "F7";
120 case 0x004a: return "F8";
121 case 0x004b: return "F9";
122 case 0x004c: return "F10";
123 case 0x005f: return "F11";
124 case 0x0060: return "F12";
126 // Alphanumeric keys
127 case 0x000a: return "Digit1";
128 case 0x000b: return "Digit2";
129 case 0x000c: return "Digit3";
130 case 0x000d: return "Digit4";
131 case 0x000e: return "Digit5";
132 case 0x000f: return "Digit6";
133 case 0x0010: return "Digit7";
134 case 0x0011: return "Digit8";
135 case 0x0012: return "Digit9";
136 case 0x0013: return "Digit0";
137 case 0x0014: return "Minus";
138 case 0x0015: return "Equal";
139 case 0x0016: return "Backspace";
140 case 0x0017: return "Tab";
141 case 0x0018: return "KeyQ";
142 case 0x0019: return "KeyW";
143 case 0x001a: return "KeyE";
144 case 0x001b: return "KeyR";
145 case 0x001c: return "KeyT";
146 case 0x001d: return "KeyY";
147 case 0x001e: return "KeyU";
148 case 0x001f: return "KeyI";
149 case 0x0020: return "KeyO";
150 case 0x0021: return "KeyP";
151 case 0x0022: return "BracketLeft";
152 case 0x0023: return "BracketRight";
153 case 0x0024: return "Enter";
154 case 0x0025: return "ControlLeft";
155 case 0x0026: return "KeyA";
156 case 0x0027: return "KeyS";
157 case 0x0028: return "KeyD";
158 case 0x0029: return "KeyF";
159 case 0x002a: return "KeyG";
160 case 0x002b: return "KeyH";
161 case 0x002c: return "KeyJ";
162 case 0x002d: return "KeyK";
163 case 0x002e: return "KeyL";
164 case 0x002f: return "Semicolon";
165 case 0x0030: return "Quote";
166 case 0x0031: return "BackQuote";
167 case 0x0032: return "ShiftLeft";
168 case 0x0033: return "Backslash";
169 case 0x0034: return "KeyZ";
170 case 0x0035: return "KeyX";
171 case 0x0036: return "KeyC";
172 case 0x0037: return "KeyV";
173 case 0x0038: return "KeyB";
174 case 0x0039: return "KeyN";
175 case 0x003a: return "KeyM";
176 case 0x003b: return "Comma";
177 case 0x003c: return "Period";
178 case 0x003d: return "Slash";
179 case 0x003e: return "ShiftRight";
180 case 0x003f: return "NumpadMultiply";
181 case 0x0040: return "AltLeft";
182 case 0x0041: return "Space";
183 case 0x0042: return "CapsLock";
184 case 0x004d: return "NumLock";
185 case 0x004e: return "ScrollLock";
186 case 0x005e: return "IntlBackslash";
187 case 0x0064: return "Convert";
188 case 0x0065: return "KanaMode";
189 case 0x0066: return "NoConvert";
190 case 0x0069: return "ControlRight";
191 case 0x006c: return "AltRight";
192 case 0x0082: return "HangulMode";
193 case 0x0083: return "Hanja";
194 case 0x0085: return "OSLeft";
195 case 0x0086: return "OSRight";
196 case 0x0087: return "ContextMenu";
197 case 0x0061: return "IntlRo";
198 case 0x0084: return "IntlYen";
200 // Control pad keys
201 case 0x006b: return "PrintScreen";
202 case 0x0070: return "PageUp";
203 case 0x0073: return "End";
204 case 0x0076: return "Insert";
205 case 0x0077: return "Delete";
206 case 0x006e: return "Home";
207 case 0x0075: return "PageDown";
208 case 0x0079: return "VolumeMute";
209 case 0x007a: return "VolumeDown";
210 case 0x007b: return "VolumeUp";
211 case 0x007c: return "Power";
212 case 0x007f: return "Pause";
213 case 0x0092: return "Help";
215 // Arrow pad keys
216 case 0x006f: return "ArrowUp";
217 case 0x0071: return "ArrowLeft";
218 case 0x0072: return "ArrowRight";
219 case 0x0074: return "ArrowDown";
221 // Numpad keys
222 case 0x005a: return "Numpad0";
223 case 0x0057: return "Numpad1";
224 case 0x0058: return "Numpad2";
225 case 0x0059: return "Numpad3";
226 case 0x0053: return "Numpad4";
227 case 0x0054: return "Numpad5";
228 case 0x0055: return "Numpad6";
229 case 0x004f: return "Numpad7";
230 case 0x0050: return "Numpad8";
231 case 0x0051: return "Numpad9";
232 case 0x0052: return "NumpadSubtract";
233 case 0x0056: return "NumpadAdd";
234 case 0x005b: return "NumpadDecimal";
235 case 0x0068: return "NumpadEnter";
236 case 0x006a: return "NumpadDivide";
237 case 0x00bb: return "NumpadParenLeft";
238 case 0x00bc: return "NumpadParenRight";
240 // Unsupported keys
242 // No entry in specification.
243 case 0x0062: return ""; // UsbKeyCode: 0x070092(LANG3)
244 case 0x0063: return ""; // UsbKeyCode: 0x070093(LANG4)
245 case 0x007d: return ""; // UsbKeyCode: 0x070067(Num_=)
246 case 0x007e: return ""; // UsbkeyCode: 0x0700d7(Num_+-)
247 case 0x0081: return ""; // UsbKeyCode: 0x0700dc(NumpadDecimal)
248 case 0x0088: return ""; // UsbKeyCode: 0x07009b(Cancel)
249 case 0x0089: return ""; // UsbKeyCode: 0x070079(Again)
250 case 0x008b: return ""; // UsbKeyCode: 0x07007a(Undo)
251 case 0x008d: return ""; // UsbKeyCode: 0x07007c(Copy)
252 case 0x008f: return ""; // UsbKeyCode: 0x07007d(Paste)
253 case 0x0090: return ""; // UsbKeyCode: 0x07007e(Find)
254 case 0x0091: return ""; // UsbKeyCode: 0x07007b(Cut)
255 case 0x0093: return ""; // UsbKeyCode: 0x070076(Menu)
257 // USB Usage Page 0x01: Generic Desktop Page
258 case 0x0094: return ""; // 0x0C page: AL_Calculator
259 case 0x0096: return ""; // 0x01 page: SystemSleep
260 case 0x0097: return ""; // 0x01 page: SystemWakeUp
262 // USB Usage Page 0x0c: Consumer Page
263 case 0x0098: return ""; // AL_FileBrowser (Explorer)";
264 case 0x00a4: return ""; // AC_Bookmarks (Favorites)";
265 case 0x00a5: return ""; // AL_LocalMachineBrowser";
266 case 0x00a6: return ""; // AC_Back";
267 case 0x00a7: return ""; // AC_Forward";
268 case 0x00b5: return ""; // AC_Refresh (Reload)";
269 case 0x00ef: return ""; // AC_Send";
270 case 0x00f0: return ""; // AC_Reply";
271 case 0x00f1: return ""; // AC_ForwardMsg (MailForward)";
272 case 0x00f3: return ""; // AL_Documents";
274 default: return "";
278 } // namespace input_method
279 } // namespace chromeos