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"
12 DomKey
NonPrintableXKeySymToDomKey(xkb_keysym_t keysym
) {
14 case XKB_KEY_BackSpace
:
15 return DomKey::BACKSPACE
;
18 case XKB_KEY_ISO_Left_Tab
:
21 case XKB_KEY_KP_Begin
:
22 case XKB_KEY_XF86Clear
:
25 case XKB_KEY_KP_Enter
:
27 case XKB_KEY_Linefeed
:
31 case XKB_KEY_Scroll_Lock
:
32 return DomKey::SCROLL_LOCK
;
34 return DomKey::ESCAPE
;
35 case XKB_KEY_Multi_key
:
36 return DomKey::COMPOSE
;
38 return DomKey::KANJI_MODE
;
39 case XKB_KEY_Muhenkan
:
40 return DomKey::NON_CONVERT
;
41 case XKB_KEY_Henkan_Mode
:
42 return DomKey::CONVERT
;
44 return DomKey::ROMAJI
;
45 case XKB_KEY_Hiragana
:
46 return DomKey::HIRAGANA
;
47 case XKB_KEY_Katakana
:
48 return DomKey::KATAKANA
;
49 case XKB_KEY_Hiragana_Katakana
:
50 return DomKey::HIRAGANA_KATAKANA
;
52 return DomKey::ZENKAKU
;
54 return DomKey::HANKAKU
;
55 case XKB_KEY_Zenkaku_Hankaku
:
56 return DomKey::ZENKAKU_HANKAKU
;
57 case XKB_KEY_Kana_Lock
:
58 return DomKey::KANA_MODE
;
59 case XKB_KEY_Eisu_Shift
:
60 case XKB_KEY_Eisu_toggle
:
63 return DomKey::HANGUL_MODE
;
64 case XKB_KEY_Hangul_Hanja
:
65 return DomKey::HANJA_MODE
;
66 case XKB_KEY_Codeinput
:
67 return DomKey::CODE_INPUT
;
68 case XKB_KEY_SingleCandidate
:
69 return DomKey::SINGLE_CANDIDATE
;
70 case XKB_KEY_MultipleCandidate
:
71 return DomKey::ALL_CANDIDATES
;
72 case XKB_KEY_PreviousCandidate
:
73 return DomKey::PREVIOUS_CANDIDATE
;
79 return DomKey::ARROW_LEFT
;
82 return DomKey::ARROW_UP
;
84 case XKB_KEY_KP_Right
:
85 return DomKey::ARROW_RIGHT
;
88 return DomKey::ARROW_DOWN
;
90 case XKB_KEY_KP_Prior
:
91 return DomKey::PAGE_UP
;
94 case XKB_KEY_XF86ScrollDown
:
95 return DomKey::PAGE_DOWN
;
98 case XKB_KEY_XF86ScrollUp
:
101 return DomKey::SELECT
;
103 return DomKey::PRINT
;
104 case XKB_KEY_Execute
:
105 return DomKey::EXECUTE
;
107 case XKB_KEY_KP_Insert
:
108 return DomKey::INSERT
;
114 return DomKey::CONTEXT_MENU
;
118 return DomKey::CANCEL
;
122 case XKB_KEY_3270_Attn
:
124 case XKB_KEY_Mode_switch
:
125 return DomKey::MODE_CHANGE
;
126 case XKB_KEY_Num_Lock
:
127 return DomKey::NUM_LOCK
;
156 case XKB_KEY_XF86Tools
: // XKB 'inet' mapping of F13
160 case XKB_KEY_XF86Launch5
: // XKB 'inet' mapping of F14
163 case XKB_KEY_XF86Launch6
: // XKB 'inet' mapping of F15
166 case XKB_KEY_XF86Launch7
: // XKB 'inet' mapping of F16
169 case XKB_KEY_XF86Launch8
: // XKB 'inet' mapping of F17
172 case XKB_KEY_XF86Launch9
: // XKB 'inet' mapping of F18
186 case XKB_KEY_Shift_L
:
187 case XKB_KEY_Shift_R
:
188 return DomKey::SHIFT
;
189 case XKB_KEY_Control_L
:
190 case XKB_KEY_Control_R
:
191 return DomKey::CONTROL
;
192 case XKB_KEY_Caps_Lock
:
193 return DomKey::CAPS_LOCK
;
200 case XKB_KEY_Super_L
:
201 case XKB_KEY_Super_R
:
203 case XKB_KEY_Hyper_L
:
204 case XKB_KEY_Hyper_R
:
205 return DomKey::HYPER
;
208 case XKB_KEY_SunProps
:
209 return DomKey::PROPS
;
210 case XKB_KEY_XF86Next_VMode
:
211 return DomKey::VIDEO_MODE_NEXT
;
212 case XKB_KEY_XF86MonBrightnessUp
:
213 return DomKey::BRIGHTNESS_UP
;
214 case XKB_KEY_XF86MonBrightnessDown
:
215 return DomKey::BRIGHTNESS_DOWN
;
216 case XKB_KEY_XF86Standby
:
217 case XKB_KEY_XF86Sleep
:
218 case XKB_KEY_XF86Suspend
:
219 return DomKey::STANDBY
;
220 case XKB_KEY_XF86AudioLowerVolume
:
221 return DomKey::VOLUME_DOWN
;
222 case XKB_KEY_XF86AudioMute
:
223 return DomKey::VOLUME_MUTE
;
224 case XKB_KEY_XF86AudioRaiseVolume
:
225 return DomKey::VOLUME_UP
;
226 case XKB_KEY_XF86AudioPlay
:
227 return DomKey::MEDIA_PLAY
;
228 case XKB_KEY_XF86AudioStop
:
229 return DomKey::MEDIA_STOP
;
230 case XKB_KEY_XF86AudioPrev
:
231 return DomKey::MEDIA_TRACK_PREVIOUS
;
232 case XKB_KEY_XF86AudioNext
:
233 return DomKey::MEDIA_TRACK_NEXT
;
234 case XKB_KEY_XF86HomePage
:
235 return DomKey::BROWSER_HOME
;
236 case XKB_KEY_XF86Mail
:
237 return DomKey::LAUNCH_MAIL
;
238 case XKB_KEY_XF86Search
:
239 return DomKey::BROWSER_SEARCH
;
240 case XKB_KEY_XF86AudioRecord
:
241 return DomKey::MEDIA_RECORD
;
242 case XKB_KEY_XF86Calculator
:
243 return DomKey::LAUNCH_CALCULATOR
;
244 case XKB_KEY_XF86Calendar
:
245 return DomKey::LAUNCH_CALENDAR
;
246 case XKB_KEY_XF86Back
:
247 return DomKey::BROWSER_BACK
;
248 case XKB_KEY_XF86Forward
:
249 return DomKey::BROWSER_FORWARD
;
250 case XKB_KEY_XF86Stop
:
251 return DomKey::BROWSER_STOP
;
252 case XKB_KEY_XF86Refresh
:
253 case XKB_KEY_XF86Reload
:
254 return DomKey::BROWSER_REFRESH
;
255 case XKB_KEY_XF86PowerOff
:
256 return DomKey::POWER_OFF
;
257 case XKB_KEY_XF86WakeUp
:
258 return DomKey::WAKE_UP
;
259 case XKB_KEY_XF86Eject
:
260 return DomKey::EJECT
;
261 case XKB_KEY_XF86ScreenSaver
:
262 return DomKey::LAUNCH_SCREEN_SAVER
;
263 case XKB_KEY_XF86WWW
:
264 return DomKey::LAUNCH_WEB_BROWSER
;
265 case XKB_KEY_XF86Favorites
:
266 return DomKey::BROWSER_FAVORITES
;
267 case XKB_KEY_XF86AudioPause
:
268 return DomKey::MEDIA_PAUSE
;
269 case XKB_KEY_XF86AudioMedia
:
270 case XKB_KEY_XF86Music
:
271 return DomKey::LAUNCH_MUSIC_PLAYER
;
272 case XKB_KEY_XF86MyComputer
:
273 case XKB_KEY_XF86Explorer
:
274 return DomKey::LAUNCH_MY_COMPUTER
;
275 case XKB_KEY_XF86AudioRewind
:
276 return DomKey::MEDIA_REWIND
;
278 case XKB_KEY_XF86Video
:
279 return DomKey::LAUNCH_MEDIA_PLAYER
;
280 case XKB_KEY_XF86Close
:
281 return DomKey::CLOSE
;
282 case XKB_KEY_XF86Copy
:
283 case XKB_KEY_SunCopy
:
285 case XKB_KEY_XF86Cut
:
288 case XKB_KEY_XF86Display
:
289 return DomKey::DISPLAY_SWAP
;
290 case XKB_KEY_XF86Excel
:
291 return DomKey::LAUNCH_SPREADSHEET
;
292 case XKB_KEY_XF86LogOff
:
293 return DomKey::LOG_OFF
;
294 case XKB_KEY_XF86New
:
296 case XKB_KEY_XF86Open
:
297 case XKB_KEY_SunOpen
:
299 case XKB_KEY_XF86Paste
:
300 case XKB_KEY_SunPaste
:
301 return DomKey::PASTE
;
302 case XKB_KEY_XF86Reply
:
303 return DomKey::MAIL_REPLY
;
304 case XKB_KEY_XF86Save
:
306 case XKB_KEY_XF86Send
:
307 return DomKey::MAIL_SEND
;
308 case XKB_KEY_XF86Spell
:
309 return DomKey::SPELL_CHECK
;
310 case XKB_KEY_XF86SplitScreen
:
311 return DomKey::SPLIT_SCREEN_TOGGLE
;
312 case XKB_KEY_XF86Word
:
313 case XKB_KEY_XF86OfficeHome
:
314 return DomKey::LAUNCH_WORD_PROCESSOR
;
315 case XKB_KEY_XF86ZoomIn
:
316 return DomKey::ZOOM_IN
;
317 case XKB_KEY_XF86ZoomOut
:
318 return DomKey::ZOOM_OUT
;
319 case XKB_KEY_XF86WebCam
:
320 return DomKey::LAUNCH_WEB_CAM
;
321 case XKB_KEY_XF86MailForward
:
322 return DomKey::MAIL_FORWARD
;
323 case XKB_KEY_XF86AudioForward
:
324 return DomKey::MEDIA_FAST_FORWARD
;
325 case XKB_KEY_XF86AudioRandomPlay
:
326 return DomKey::RANDOM_TOGGLE
;
327 case XKB_KEY_XF86Subtitle
:
328 return DomKey::SUBTITLE
;
329 case XKB_KEY_XF86Hibernate
:
330 return DomKey::HIBERNATE
;
331 case XKB_KEY_3270_EraseEOF
:
332 return DomKey::ERASE_EOF
;
333 case XKB_KEY_3270_Play
:
335 case XKB_KEY_3270_ExSelect
:
336 return DomKey::EX_SEL
;
337 case XKB_KEY_3270_CursorSelect
:
338 return DomKey::CR_SEL
;
339 case XKB_KEY_3270_PrintScreen
:
340 return DomKey::PRINT_SCREEN
;
341 case XKB_KEY_ISO_Level3_Shift
:
342 return DomKey::ALT_GRAPH
;
343 case XKB_KEY_ISO_Level3_Latch
:
344 return DomKey::ALT_GRAPH_LATCH
;
345 case XKB_KEY_ISO_Level5_Shift
:
346 return DomKey::SHIFT_LEVEL5
;
347 case XKB_KEY_ISO_Next_Group
:
348 return DomKey::GROUP_NEXT
;
349 case XKB_KEY_ISO_Prev_Group
:
350 return DomKey::GROUP_PREVIOUS
;
351 case XKB_KEY_ISO_First_Group
:
352 return DomKey::GROUP_FIRST
;
353 case XKB_KEY_ISO_Last_Group
:
354 return DomKey::GROUP_LAST
;
355 case XKB_KEY_dead_grave
:
356 case XKB_KEY_dead_acute
:
357 case XKB_KEY_dead_circumflex
:
358 case XKB_KEY_dead_tilde
:
359 case XKB_KEY_dead_macron
:
360 case XKB_KEY_dead_breve
:
361 case XKB_KEY_dead_abovedot
:
362 case XKB_KEY_dead_diaeresis
:
363 case XKB_KEY_dead_abovering
:
364 case XKB_KEY_dead_doubleacute
:
365 case XKB_KEY_dead_caron
:
366 case XKB_KEY_dead_cedilla
:
367 case XKB_KEY_dead_ogonek
:
368 case XKB_KEY_dead_iota
:
369 case XKB_KEY_dead_belowdot
:
370 case XKB_KEY_dead_hook
:
371 case XKB_KEY_dead_horn
:
372 case XKB_KEY_dead_stroke
:
373 case XKB_KEY_dead_abovecomma
:
374 case XKB_KEY_dead_abovereversedcomma
:
375 case XKB_KEY_dead_doublegrave
:
376 case XKB_KEY_dead_belowring
:
377 case XKB_KEY_dead_belowmacron
:
378 case XKB_KEY_dead_belowcircumflex
:
379 case XKB_KEY_dead_belowtilde
:
380 case XKB_KEY_dead_belowbreve
:
381 case XKB_KEY_dead_belowdiaeresis
:
382 case XKB_KEY_dead_invertedbreve
:
383 case XKB_KEY_dead_belowcomma
:
384 case XKB_KEY_dead_currency
:
391 DomKey
XKeySymToDomKey(xkb_keysym_t keysym
, base::char16 character
) {
392 DomKey dom_key
= NonPrintableXKeySymToDomKey(keysym
);
393 if (dom_key
== DomKey::NONE
)
394 dom_key
= CharacterToDomKey(character
);