OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 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. | |
4 | |
5 #include "app/keyboard_code_conversion_x.h" | |
6 | |
7 #include <X11/keysym.h> | |
8 #include <X11/Xlib.h> | |
9 | |
10 #include "base/logging.h" | |
11 | |
12 namespace app { | |
13 | |
14 // Get an app::KeyboardCode from an X keyevent | |
15 KeyboardCode KeyboardCodeFromXKeyEvent(XEvent* xev) { | |
16 KeySym keysym = XLookupKeysym(&xev->xkey, 0); | |
17 | |
18 // Consult GDK key translation (in WindowsKeyCodeForGdkKeyCode) for details | |
19 // about the following translations. | |
20 | |
21 // TODO(sad): Have |keysym| go through the X map list? | |
22 | |
23 switch (keysym) { | |
24 case XK_BackSpace: | |
25 return VKEY_BACK; | |
26 case XK_Delete: | |
27 case XK_KP_Delete: | |
28 return VKEY_DELETE; | |
29 case XK_Tab: | |
30 case XK_KP_Tab: | |
31 return VKEY_TAB; | |
32 case XK_Linefeed: | |
33 case XK_Return: | |
34 case XK_KP_Enter: | |
35 return VKEY_RETURN; | |
36 case XK_Clear: | |
37 return VKEY_CLEAR; | |
38 case XK_KP_Space: | |
39 case XK_space: | |
40 return VKEY_SPACE; | |
41 case XK_Home: | |
42 case XK_KP_Home: | |
43 return VKEY_HOME; | |
44 case XK_End: | |
45 case XK_KP_End: | |
46 return VKEY_END; | |
47 case XK_Page_Up: | |
48 case XK_KP_Page_Up: | |
49 return VKEY_PRIOR; | |
50 case XK_Page_Down: | |
51 case XK_KP_Page_Down: | |
52 return VKEY_NEXT; | |
53 case XK_Left: | |
54 case XK_KP_Left: | |
55 return VKEY_LEFT; | |
56 case XK_Right: | |
57 case XK_KP_Right: | |
58 return VKEY_RIGHT; | |
59 case XK_Down: | |
60 case XK_KP_Down: | |
61 return VKEY_DOWN; | |
62 case XK_Up: | |
63 case XK_KP_Up: | |
64 return VKEY_UP; | |
65 case XK_Escape: | |
66 return VKEY_ESCAPE; | |
67 case XK_A: | |
68 case XK_a: | |
69 return VKEY_A; | |
70 case XK_B: | |
71 case XK_b: | |
72 return VKEY_B; | |
73 case XK_C: | |
74 case XK_c: | |
75 return VKEY_C; | |
76 case XK_D: | |
77 case XK_d: | |
78 return VKEY_D; | |
79 case XK_E: | |
80 case XK_e: | |
81 return VKEY_E; | |
82 case XK_F: | |
83 case XK_f: | |
84 return VKEY_F; | |
85 case XK_G: | |
86 case XK_g: | |
87 return VKEY_G; | |
88 case XK_H: | |
89 case XK_h: | |
90 return VKEY_H; | |
91 case XK_I: | |
92 case XK_i: | |
93 return VKEY_I; | |
94 case XK_J: | |
95 case XK_j: | |
96 return VKEY_J; | |
97 case XK_K: | |
98 case XK_k: | |
99 return VKEY_K; | |
100 case XK_L: | |
101 case XK_l: | |
102 return VKEY_L; | |
103 case XK_M: | |
104 case XK_m: | |
105 return VKEY_M; | |
106 case XK_N: | |
107 case XK_n: | |
108 return VKEY_N; | |
109 case XK_O: | |
110 case XK_o: | |
111 return VKEY_O; | |
112 case XK_P: | |
113 case XK_p: | |
114 return VKEY_P; | |
115 case XK_Q: | |
116 case XK_q: | |
117 return VKEY_Q; | |
118 case XK_R: | |
119 case XK_r: | |
120 return VKEY_R; | |
121 case XK_S: | |
122 case XK_s: | |
123 return VKEY_S; | |
124 case XK_T: | |
125 case XK_t: | |
126 return VKEY_T; | |
127 case XK_U: | |
128 case XK_u: | |
129 return VKEY_U; | |
130 case XK_V: | |
131 case XK_v: | |
132 return VKEY_V; | |
133 case XK_W: | |
134 case XK_w: | |
135 return VKEY_W; | |
136 case XK_X: | |
137 case XK_x: | |
138 return VKEY_X; | |
139 case XK_Y: | |
140 case XK_y: | |
141 return VKEY_Y; | |
142 case XK_Z: | |
143 case XK_z: | |
144 return VKEY_Z; | |
145 case XK_0: | |
146 return VKEY_0; | |
147 case XK_1: | |
148 return VKEY_1; | |
149 case XK_2: | |
150 return VKEY_2; | |
151 case XK_3: | |
152 return VKEY_3; | |
153 case XK_4: | |
154 return VKEY_4; | |
155 case XK_5: | |
156 return VKEY_5; | |
157 case XK_6: | |
158 return VKEY_6; | |
159 case XK_7: | |
160 return VKEY_7; | |
161 case XK_8: | |
162 return VKEY_8; | |
163 case XK_9: | |
164 return VKEY_9; | |
165 | |
166 case XK_multiply: | |
167 case XK_KP_Multiply: | |
168 return VKEY_MULTIPLY; | |
169 case XK_KP_Add: | |
170 return VKEY_ADD; | |
171 case XK_KP_Separator: | |
172 return VKEY_SEPARATOR; | |
173 case XK_KP_Subtract: | |
174 return VKEY_SUBTRACT; | |
175 case XK_KP_Decimal: | |
176 return VKEY_DECIMAL; | |
177 case XK_KP_Divide: | |
178 return VKEY_DIVIDE; | |
179 case XK_equal: | |
180 case XK_plus: | |
181 return VKEY_OEM_PLUS; | |
182 case XK_comma: | |
183 case XK_less: | |
184 return VKEY_OEM_COMMA; | |
185 case XK_minus: | |
186 case XK_underscore: | |
187 return VKEY_OEM_MINUS; | |
188 case XK_greater: | |
189 case XK_period: | |
190 return VKEY_OEM_PERIOD; | |
191 case XK_colon: | |
192 case XK_semicolon: | |
193 return VKEY_OEM_1; | |
194 case XK_question: | |
195 case XK_slash: | |
196 return VKEY_OEM_2; | |
197 case XK_asciitilde: | |
198 case XK_quoteleft: | |
199 return VKEY_OEM_3; | |
200 case XK_bracketleft: | |
201 case XK_braceleft: | |
202 return VKEY_OEM_4; | |
203 case XK_backslash: | |
204 case XK_bar: | |
205 return VKEY_OEM_5; | |
206 case XK_bracketright: | |
207 case XK_braceright: | |
208 return VKEY_OEM_6; | |
209 case XK_quoteright: | |
210 case XK_quotedbl: | |
211 return VKEY_OEM_7; | |
212 case XK_Shift_L: | |
213 case XK_Shift_R: | |
214 return VKEY_SHIFT; | |
215 case XK_Control_L: | |
216 case XK_Control_R: | |
217 return VKEY_CONTROL; | |
218 case XK_Alt_L: | |
219 case XK_Alt_R: | |
220 return VKEY_MENU; | |
221 case XK_Pause: | |
222 return VKEY_PAUSE; | |
223 case XK_Caps_Lock: | |
224 return VKEY_CAPITAL; | |
225 case XK_Num_Lock: | |
226 return VKEY_NUMLOCK; | |
227 case XK_Scroll_Lock: | |
228 return VKEY_SCROLL; | |
229 case XK_Select: | |
230 return VKEY_SELECT; | |
231 case XK_Print: | |
232 return VKEY_PRINT; | |
233 case XK_Execute: | |
234 return VKEY_EXECUTE; | |
235 case XK_Insert: | |
236 case XK_KP_Insert: | |
237 return VKEY_INSERT; | |
238 case XK_Help: | |
239 return VKEY_HELP; | |
240 case XK_Meta_L: | |
241 case XK_Super_L: | |
242 return VKEY_LWIN; | |
243 case XK_Meta_R: | |
244 case XK_Super_R: | |
245 return VKEY_RWIN; | |
246 case XK_Menu: | |
247 return VKEY_APPS; | |
248 case XK_F1: | |
249 case XK_F2: | |
250 case XK_F3: | |
251 case XK_F4: | |
252 case XK_F5: | |
253 case XK_F6: | |
254 case XK_F7: | |
255 case XK_F8: | |
256 case XK_F9: | |
257 case XK_F10: | |
258 case XK_F11: | |
259 case XK_F12: | |
260 case XK_F13: | |
261 case XK_F14: | |
262 case XK_F15: | |
263 case XK_F16: | |
264 case XK_F17: | |
265 case XK_F18: | |
266 case XK_F19: | |
267 case XK_F20: | |
268 case XK_F21: | |
269 case XK_F22: | |
270 case XK_F23: | |
271 case XK_F24: | |
272 return static_cast<app::KeyboardCode>(VKEY_F1 + (keysym - XK_F1)); | |
273 | |
274 // TODO(sad): some keycodes are still missing. | |
275 } | |
276 | |
277 DLOG(WARNING) << "Unknown keycode: " << keysym; | |
278 return VKEY_UNKNOWN; | |
279 } | |
280 | |
281 } // namespace app | |
OLD | NEW |