| 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 |