Roll src/third_party/WebKit d9c6159:8139f33 (svn 201974:201975)
[chromium-blink-merge.git] / ui / events / keycodes / keyboard_code_conversion_xkb.cc
blob284a59db0898dd09a591082b9e4d5765112fbb3a
1 // Copyright 2014 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 "ui/events/keycodes/keyboard_code_conversion_xkb.h"
7 #include "ui/events/keycodes/dom/dom_key.h"
8 #include "ui/events/keycodes/keyboard_code_conversion.h"
10 #ifndef XK_dead_greek
11 #define XK_dead_greek 0xfe8c
12 #endif
14 namespace ui {
16 DomKey NonPrintableXKeySymToDomKey(xkb_keysym_t keysym) {
17 switch (keysym) {
18 case XKB_KEY_BackSpace:
19 return DomKey::BACKSPACE;
20 case XKB_KEY_Tab:
21 case XKB_KEY_KP_Tab:
22 case XKB_KEY_ISO_Left_Tab:
23 return DomKey::TAB;
24 case XKB_KEY_Clear:
25 case XKB_KEY_KP_Begin:
26 case XKB_KEY_XF86Clear:
27 return DomKey::CLEAR;
28 case XKB_KEY_Return:
29 case XKB_KEY_KP_Enter:
30 return DomKey::ENTER;
31 case XKB_KEY_Linefeed:
32 return DomKey::ENTER;
33 case XKB_KEY_Pause:
34 return DomKey::PAUSE;
35 case XKB_KEY_Scroll_Lock:
36 return DomKey::SCROLL_LOCK;
37 case XKB_KEY_Escape:
38 return DomKey::ESCAPE;
39 case XKB_KEY_Multi_key:
40 return DomKey::COMPOSE;
41 case XKB_KEY_Kanji:
42 return DomKey::KANJI_MODE;
43 case XKB_KEY_Muhenkan:
44 return DomKey::NON_CONVERT;
45 case XKB_KEY_Henkan_Mode:
46 return DomKey::CONVERT;
47 case XKB_KEY_Romaji:
48 return DomKey::ROMAJI;
49 case XKB_KEY_Hiragana:
50 return DomKey::HIRAGANA;
51 case XKB_KEY_Katakana:
52 return DomKey::KATAKANA;
53 case XKB_KEY_Hiragana_Katakana:
54 return DomKey::HIRAGANA_KATAKANA;
55 case XKB_KEY_Zenkaku:
56 return DomKey::ZENKAKU;
57 case XKB_KEY_Hankaku:
58 return DomKey::HANKAKU;
59 case XKB_KEY_Zenkaku_Hankaku:
60 return DomKey::ZENKAKU_HANKAKU;
61 case XKB_KEY_Kana_Lock:
62 return DomKey::KANA_MODE;
63 case XKB_KEY_Eisu_Shift:
64 case XKB_KEY_Eisu_toggle:
65 return DomKey::EISU;
66 case XKB_KEY_Hangul:
67 return DomKey::HANGUL_MODE;
68 case XKB_KEY_Hangul_Hanja:
69 return DomKey::HANJA_MODE;
70 case XKB_KEY_Codeinput:
71 return DomKey::CODE_INPUT;
72 case XKB_KEY_SingleCandidate:
73 return DomKey::SINGLE_CANDIDATE;
74 case XKB_KEY_MultipleCandidate:
75 return DomKey::ALL_CANDIDATES;
76 case XKB_KEY_PreviousCandidate:
77 return DomKey::PREVIOUS_CANDIDATE;
78 case XKB_KEY_Home:
79 case XKB_KEY_KP_Home:
80 return DomKey::HOME;
81 case XKB_KEY_Left:
82 case XKB_KEY_KP_Left:
83 return DomKey::ARROW_LEFT;
84 case XKB_KEY_Up:
85 case XKB_KEY_KP_Up:
86 return DomKey::ARROW_UP;
87 case XKB_KEY_Right:
88 case XKB_KEY_KP_Right:
89 return DomKey::ARROW_RIGHT;
90 case XKB_KEY_Down:
91 case XKB_KEY_KP_Down:
92 return DomKey::ARROW_DOWN;
93 case XKB_KEY_Prior:
94 case XKB_KEY_KP_Prior:
95 return DomKey::PAGE_UP;
96 case XKB_KEY_Next:
97 case XKB_KEY_KP_Next:
98 case XKB_KEY_XF86ScrollDown:
99 return DomKey::PAGE_DOWN;
100 case XKB_KEY_End:
101 case XKB_KEY_KP_End:
102 case XKB_KEY_XF86ScrollUp:
103 return DomKey::END;
104 case XKB_KEY_Select:
105 return DomKey::SELECT;
106 case XKB_KEY_Print:
107 return DomKey::PRINT;
108 case XKB_KEY_Execute:
109 return DomKey::EXECUTE;
110 case XKB_KEY_Insert:
111 case XKB_KEY_KP_Insert:
112 return DomKey::INSERT;
113 case XKB_KEY_Undo:
114 return DomKey::UNDO;
115 case XKB_KEY_Redo:
116 return DomKey::REDO;
117 case XKB_KEY_Menu:
118 return DomKey::CONTEXT_MENU;
119 case XKB_KEY_Find:
120 return DomKey::FIND;
121 case XKB_KEY_Cancel:
122 return DomKey::CANCEL;
123 case XKB_KEY_Help:
124 return DomKey::HELP;
125 case XKB_KEY_Break:
126 case XKB_KEY_3270_Attn:
127 return DomKey::ATTN;
128 case XKB_KEY_Mode_switch:
129 return DomKey::MODE_CHANGE;
130 case XKB_KEY_Num_Lock:
131 return DomKey::NUM_LOCK;
132 case XKB_KEY_F1:
133 case XKB_KEY_KP_F1:
134 return DomKey::F1;
135 case XKB_KEY_F2:
136 case XKB_KEY_KP_F2:
137 return DomKey::F2;
138 case XKB_KEY_F3:
139 case XKB_KEY_KP_F3:
140 return DomKey::F3;
141 case XKB_KEY_F4:
142 case XKB_KEY_KP_F4:
143 return DomKey::F4;
144 case XKB_KEY_F5:
145 return DomKey::F5;
146 case XKB_KEY_F6:
147 return DomKey::F6;
148 case XKB_KEY_F7:
149 return DomKey::F7;
150 case XKB_KEY_F8:
151 return DomKey::F8;
152 case XKB_KEY_F9:
153 return DomKey::F9;
154 case XKB_KEY_F10:
155 return DomKey::F10;
156 case XKB_KEY_F11:
157 return DomKey::F11;
158 case XKB_KEY_F12:
159 return DomKey::F12;
160 case XKB_KEY_XF86Tools: // XKB 'inet' mapping of F13
161 case XKB_KEY_F13:
162 return DomKey::F13;
163 case XKB_KEY_F14:
164 case XKB_KEY_XF86Launch5: // XKB 'inet' mapping of F14
165 return DomKey::F14;
166 case XKB_KEY_F15:
167 case XKB_KEY_XF86Launch6: // XKB 'inet' mapping of F15
168 return DomKey::F15;
169 case XKB_KEY_F16:
170 case XKB_KEY_XF86Launch7: // XKB 'inet' mapping of F16
171 return DomKey::F16;
172 case XKB_KEY_F17:
173 case XKB_KEY_XF86Launch8: // XKB 'inet' mapping of F17
174 return DomKey::F17;
175 case XKB_KEY_F18:
176 case XKB_KEY_XF86Launch9: // XKB 'inet' mapping of F18
177 return DomKey::F18;
178 case XKB_KEY_F19:
179 return DomKey::F19;
180 case XKB_KEY_F20:
181 return DomKey::F20;
182 case XKB_KEY_F21:
183 return DomKey::F21;
184 case XKB_KEY_F22:
185 return DomKey::F22;
186 case XKB_KEY_F23:
187 return DomKey::F23;
188 case XKB_KEY_F24:
189 return DomKey::F24;
190 case XKB_KEY_Shift_L:
191 case XKB_KEY_Shift_R:
192 return DomKey::SHIFT;
193 case XKB_KEY_Control_L:
194 case XKB_KEY_Control_R:
195 return DomKey::CONTROL;
196 case XKB_KEY_Caps_Lock:
197 return DomKey::CAPS_LOCK;
198 case XKB_KEY_Meta_L:
199 case XKB_KEY_Meta_R:
200 return DomKey::META;
201 case XKB_KEY_Alt_L:
202 case XKB_KEY_Alt_R:
203 return DomKey::ALT;
204 case XKB_KEY_Super_L:
205 case XKB_KEY_Super_R:
206 return DomKey::OS;
207 case XKB_KEY_Hyper_L:
208 case XKB_KEY_Hyper_R:
209 return DomKey::HYPER;
210 case XKB_KEY_Delete:
211 return DomKey::DEL;
212 case XKB_KEY_SunProps:
213 return DomKey::PROPS;
214 case XKB_KEY_XF86Next_VMode:
215 return DomKey::VIDEO_MODE_NEXT;
216 case XKB_KEY_XF86MonBrightnessUp:
217 return DomKey::BRIGHTNESS_UP;
218 case XKB_KEY_XF86MonBrightnessDown:
219 return DomKey::BRIGHTNESS_DOWN;
220 case XKB_KEY_XF86Standby:
221 case XKB_KEY_XF86Sleep:
222 case XKB_KEY_XF86Suspend:
223 return DomKey::STANDBY;
224 case XKB_KEY_XF86AudioLowerVolume:
225 return DomKey::VOLUME_DOWN;
226 case XKB_KEY_XF86AudioMute:
227 return DomKey::VOLUME_MUTE;
228 case XKB_KEY_XF86AudioRaiseVolume:
229 return DomKey::VOLUME_UP;
230 case XKB_KEY_XF86AudioPlay:
231 return DomKey::MEDIA_PLAY;
232 case XKB_KEY_XF86AudioStop:
233 return DomKey::MEDIA_STOP;
234 case XKB_KEY_XF86AudioPrev:
235 return DomKey::MEDIA_TRACK_PREVIOUS;
236 case XKB_KEY_XF86AudioNext:
237 return DomKey::MEDIA_TRACK_NEXT;
238 case XKB_KEY_XF86HomePage:
239 return DomKey::BROWSER_HOME;
240 case XKB_KEY_XF86Mail:
241 return DomKey::LAUNCH_MAIL;
242 case XKB_KEY_XF86Search:
243 return DomKey::BROWSER_SEARCH;
244 case XKB_KEY_XF86AudioRecord:
245 return DomKey::MEDIA_RECORD;
246 case XKB_KEY_XF86Calculator:
247 return DomKey::LAUNCH_CALCULATOR;
248 case XKB_KEY_XF86Calendar:
249 return DomKey::LAUNCH_CALENDAR;
250 case XKB_KEY_XF86Back:
251 return DomKey::BROWSER_BACK;
252 case XKB_KEY_XF86Forward:
253 return DomKey::BROWSER_FORWARD;
254 case XKB_KEY_XF86Stop:
255 return DomKey::BROWSER_STOP;
256 case XKB_KEY_XF86Refresh:
257 case XKB_KEY_XF86Reload:
258 return DomKey::BROWSER_REFRESH;
259 case XKB_KEY_XF86PowerOff:
260 return DomKey::POWER_OFF;
261 case XKB_KEY_XF86WakeUp:
262 return DomKey::WAKE_UP;
263 case XKB_KEY_XF86Eject:
264 return DomKey::EJECT;
265 case XKB_KEY_XF86ScreenSaver:
266 return DomKey::LAUNCH_SCREEN_SAVER;
267 case XKB_KEY_XF86WWW:
268 return DomKey::LAUNCH_WEB_BROWSER;
269 case XKB_KEY_XF86Favorites:
270 return DomKey::BROWSER_FAVORITES;
271 case XKB_KEY_XF86AudioPause:
272 return DomKey::MEDIA_PAUSE;
273 case XKB_KEY_XF86AudioMedia:
274 case XKB_KEY_XF86Music:
275 return DomKey::LAUNCH_MUSIC_PLAYER;
276 case XKB_KEY_XF86MyComputer:
277 case XKB_KEY_XF86Explorer:
278 return DomKey::LAUNCH_MY_COMPUTER;
279 case XKB_KEY_XF86AudioRewind:
280 return DomKey::MEDIA_REWIND;
281 case XKB_KEY_XF86CD:
282 case XKB_KEY_XF86Video:
283 return DomKey::LAUNCH_MEDIA_PLAYER;
284 case XKB_KEY_XF86Close:
285 return DomKey::CLOSE;
286 case XKB_KEY_XF86Copy:
287 case XKB_KEY_SunCopy:
288 return DomKey::COPY;
289 case XKB_KEY_XF86Cut:
290 case XKB_KEY_SunCut:
291 return DomKey::CUT;
292 case XKB_KEY_XF86Display:
293 return DomKey::DISPLAY_SWAP;
294 case XKB_KEY_XF86Excel:
295 return DomKey::LAUNCH_SPREADSHEET;
296 case XKB_KEY_XF86LogOff:
297 return DomKey::LOG_OFF;
298 case XKB_KEY_XF86New:
299 return DomKey::NEW;
300 case XKB_KEY_XF86Open:
301 case XKB_KEY_SunOpen:
302 return DomKey::OPEN;
303 case XKB_KEY_XF86Paste:
304 case XKB_KEY_SunPaste:
305 return DomKey::PASTE;
306 case XKB_KEY_XF86Reply:
307 return DomKey::MAIL_REPLY;
308 case XKB_KEY_XF86Save:
309 return DomKey::SAVE;
310 case XKB_KEY_XF86Send:
311 return DomKey::MAIL_SEND;
312 case XKB_KEY_XF86Spell:
313 return DomKey::SPELL_CHECK;
314 case XKB_KEY_XF86SplitScreen:
315 return DomKey::SPLIT_SCREEN_TOGGLE;
316 case XKB_KEY_XF86Word:
317 case XKB_KEY_XF86OfficeHome:
318 return DomKey::LAUNCH_WORD_PROCESSOR;
319 case XKB_KEY_XF86ZoomIn:
320 return DomKey::ZOOM_IN;
321 case XKB_KEY_XF86ZoomOut:
322 return DomKey::ZOOM_OUT;
323 case XKB_KEY_XF86WebCam:
324 return DomKey::LAUNCH_WEB_CAM;
325 case XKB_KEY_XF86MailForward:
326 return DomKey::MAIL_FORWARD;
327 case XKB_KEY_XF86AudioForward:
328 return DomKey::MEDIA_FAST_FORWARD;
329 case XKB_KEY_XF86AudioRandomPlay:
330 return DomKey::RANDOM_TOGGLE;
331 case XKB_KEY_XF86Subtitle:
332 return DomKey::SUBTITLE;
333 case XKB_KEY_XF86Hibernate:
334 return DomKey::HIBERNATE;
335 case XKB_KEY_3270_EraseEOF:
336 return DomKey::ERASE_EOF;
337 case XKB_KEY_3270_Play:
338 return DomKey::PLAY;
339 case XKB_KEY_3270_ExSelect:
340 return DomKey::EX_SEL;
341 case XKB_KEY_3270_CursorSelect:
342 return DomKey::CR_SEL;
343 case XKB_KEY_3270_PrintScreen:
344 return DomKey::PRINT_SCREEN;
345 case XKB_KEY_ISO_Level3_Shift:
346 return DomKey::ALT_GRAPH;
347 case XKB_KEY_ISO_Level3_Latch:
348 return DomKey::ALT_GRAPH_LATCH;
349 case XKB_KEY_ISO_Level5_Shift:
350 return DomKey::SHIFT_LEVEL5;
351 case XKB_KEY_ISO_Next_Group:
352 return DomKey::GROUP_NEXT;
353 case XKB_KEY_ISO_Prev_Group:
354 return DomKey::GROUP_PREVIOUS;
355 case XKB_KEY_ISO_First_Group:
356 return DomKey::GROUP_FIRST;
357 case XKB_KEY_ISO_Last_Group:
358 return DomKey::GROUP_LAST;
359 case XKB_KEY_dead_grave:
360 // combining grave accent
361 return DomKey::DeadKeyFromCombiningCharacter(0x0300);
362 case XKB_KEY_dead_acute:
363 // combining acute accent
364 return DomKey::DeadKeyFromCombiningCharacter(0x0301);
365 case XKB_KEY_dead_circumflex:
366 // combining circumflex accent
367 return DomKey::DeadKeyFromCombiningCharacter(0x0302);
368 case XKB_KEY_dead_tilde:
369 // combining tilde
370 return DomKey::DeadKeyFromCombiningCharacter(0x0303);
371 case XKB_KEY_dead_macron:
372 // combining macron
373 return DomKey::DeadKeyFromCombiningCharacter(0x0304);
374 case XKB_KEY_dead_breve:
375 // combining breve
376 return DomKey::DeadKeyFromCombiningCharacter(0x0306);
377 case XKB_KEY_dead_abovedot:
378 // combining dot above
379 return DomKey::DeadKeyFromCombiningCharacter(0x0307);
380 case XKB_KEY_dead_diaeresis:
381 // combining diaeresis
382 return DomKey::DeadKeyFromCombiningCharacter(0x0308);
383 case XKB_KEY_dead_abovering:
384 // combining ring above
385 return DomKey::DeadKeyFromCombiningCharacter(0x030A);
386 case XKB_KEY_dead_doubleacute:
387 // combining double acute accent
388 return DomKey::DeadKeyFromCombiningCharacter(0x030B);
389 case XKB_KEY_dead_caron:
390 // combining caron
391 return DomKey::DeadKeyFromCombiningCharacter(0x030C);
392 case XKB_KEY_dead_cedilla:
393 // combining cedilla
394 return DomKey::DeadKeyFromCombiningCharacter(0x0327);
395 case XKB_KEY_dead_ogonek:
396 // combining ogonek
397 return DomKey::DeadKeyFromCombiningCharacter(0x0328);
398 case XKB_KEY_dead_iota:
399 // combining greek ypogegrammeni
400 return DomKey::DeadKeyFromCombiningCharacter(0x0345);
401 case XKB_KEY_dead_voiced_sound:
402 // combining voiced sound mark
403 return DomKey::DeadKeyFromCombiningCharacter(0x3099);
404 case XKB_KEY_dead_semivoiced_sound:
405 // combining semi-voiced sound mark
406 return DomKey::DeadKeyFromCombiningCharacter(0x309A);
407 case XKB_KEY_dead_belowdot:
408 // combining dot below
409 return DomKey::DeadKeyFromCombiningCharacter(0x0323);
410 case XKB_KEY_dead_hook:
411 // combining hook above
412 return DomKey::DeadKeyFromCombiningCharacter(0x0309);
413 case XKB_KEY_dead_horn:
414 // combining horn
415 return DomKey::DeadKeyFromCombiningCharacter(0x031B);
416 case XKB_KEY_dead_stroke:
417 // combining long solidus overlay
418 return DomKey::DeadKeyFromCombiningCharacter(0x0338);
419 case XKB_KEY_dead_abovecomma:
420 // combining comma above
421 return DomKey::DeadKeyFromCombiningCharacter(0x0313);
422 case XKB_KEY_dead_abovereversedcomma:
423 // combining reversed comma above
424 return DomKey::DeadKeyFromCombiningCharacter(0x0314);
425 case XKB_KEY_dead_doublegrave:
426 // combining double grave accent
427 return DomKey::DeadKeyFromCombiningCharacter(0x030F);
428 case XKB_KEY_dead_belowring:
429 // combining ring below
430 return DomKey::DeadKeyFromCombiningCharacter(0x0325);
431 case XKB_KEY_dead_belowmacron:
432 // combining macron below
433 return DomKey::DeadKeyFromCombiningCharacter(0x0331);
434 case XKB_KEY_dead_belowcircumflex:
435 // combining circumflex accent below
436 return DomKey::DeadKeyFromCombiningCharacter(0x032D);
437 case XKB_KEY_dead_belowtilde:
438 // combining tilde below
439 return DomKey::DeadKeyFromCombiningCharacter(0x0330);
440 case XKB_KEY_dead_belowbreve:
441 // combining breve below
442 return DomKey::DeadKeyFromCombiningCharacter(0x032E);
443 case XKB_KEY_dead_belowdiaeresis:
444 // combining diaeresis below
445 return DomKey::DeadKeyFromCombiningCharacter(0x0324);
446 case XKB_KEY_dead_invertedbreve:
447 // combining inverted breve
448 return DomKey::DeadKeyFromCombiningCharacter(0x0311);
449 case XKB_KEY_dead_belowcomma:
450 // combining comma below
451 return DomKey::DeadKeyFromCombiningCharacter(0x0326);
452 case XKB_KEY_dead_currency:
453 // currency sign
454 return DomKey::DeadKeyFromCombiningCharacter(0x00A4);
455 case XKB_KEY_dead_greek:
456 // greek question mark
457 return DomKey::DeadKeyFromCombiningCharacter(0x037E);
458 default:
459 return DomKey::NONE;
463 DomKey XKeySymToDomKey(xkb_keysym_t keysym, base::char16 character) {
464 DomKey dom_key = NonPrintableXKeySymToDomKey(keysym);
465 if (dom_key != DomKey::NONE)
466 return dom_key;
467 return DomKey::FromCharacter(character);
470 } // namespace ui