qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

ui: convert the SDL2 frontend to keycodemapdb

The SDL2 scancodes are conveniently identical to the USB
scancodes. Replace the sdl2_scancode_to_qcode table with
an automatically generated table.

Missing entries in sdl2_scancode_to_qcode now fixed:

- 0x32 -> Q_KEY_CODE_BACKSLASH
- 0x66 -> Q_KEY_CODE_POWER
- 0x67 -> Q_KEY_CODE_KP_EQUALS
- 0x74 -> Q_KEY_CODE_OPEN
- 0x77 -> Q_KEY_CODE_FRONT
- 0x7f -> Q_KEY_CODE_AUDIOMUTE
- 0x80 -> Q_KEY_CODE_VOLUMEUP
- 0x81 -> Q_KEY_CODE_VOLUMEDOWN
- 0x85 -> Q_KEY_CODE_KP_COMMA
- 0x87 -> Q_KEY_CODE_RO
- 0x89 -> Q_KEY_CODE_YEN
- 0x8a -> Q_KEY_CODE_HENKAN
- 0x93 -> Q_KEY_CODE_HIRAGANA
- 0xe8 -> Q_KEY_CODE_AUDIOPLAY
- 0xe9 -> Q_KEY_CODE_AUDIOSTOP
- 0xea -> Q_KEY_CODE_AUDIOPREV
- 0xeb -> Q_KEY_CODE_AUDIONEXT
- 0xed -> Q_KEY_CODE_VOLUMEUP
- 0xee -> Q_KEY_CODE_VOLUMEDOWN
- 0xef -> Q_KEY_CODE_AUDIOMUTE
- 0xf1 -> Q_KEY_CODE_AC_BACK
- 0xf2 -> Q_KEY_CODE_AC_FORWARD
- 0xf3 -> Q_KEY_CODE_STOP
- 0xf4 -> Q_KEY_CODE_FIND
- 0xf8 -> Q_KEY_CODE_SLEEP
- 0xfa -> Q_KEY_CODE_AC_REFRESH
- 0xfb -> Q_KEY_CODE_CALCULATOR

And some mistakes corrected:

- 0x65 -> Q_KEY_CODE_COMPOSE, not duplicating Q_KEY_CODE_MENU

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Message-id: 20180117164717.15855-2-berrange@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

authored by

Daniel P. Berrange and committed by
Gerd Hoffmann
ed7b2624 4c956bd8

+16 -272
+1
Makefile
··· 236 236 ui/input-keymap-qcode-to-qnum.c \ 237 237 ui/input-keymap-qnum-to-qcode.c \ 238 238 ui/input-keymap-qcode-to-linux.c \ 239 + ui/input-keymap-usb-to-qcode.c \ 239 240 $(NULL) 240 241 241 242 GENERATED_FILES += $(KEYCODEMAP_FILES)
+3
include/ui/input.h
··· 80 80 extern const guint qemu_input_map_qcode_to_linux_len; 81 81 extern const guint16 qemu_input_map_qcode_to_linux[]; 82 82 83 + extern const guint qemu_input_map_usb_to_qcode_len; 84 + extern const guint16 qemu_input_map_usb_to_qcode[]; 85 + 83 86 #endif /* INPUT_H */
+1
ui/input-keymap.c
··· 9 9 #include "ui/input-keymap-qcode-to-qnum.c" 10 10 #include "ui/input-keymap-qnum-to-qcode.c" 11 11 #include "ui/input-keymap-qcode-to-linux.c" 12 + #include "ui/input-keymap-usb-to-qcode.c" 12 13 13 14 int qemu_input_linux_to_qcode(unsigned int lnx) 14 15 {
+11 -5
ui/sdl2-input.c
··· 30 30 #include "ui/sdl2.h" 31 31 #include "sysemu/sysemu.h" 32 32 33 - #include "sdl2-keymap.h" 34 - 35 33 static uint8_t modifiers_state[SDL_NUM_SCANCODES]; 36 34 37 35 void sdl2_reset_keys(struct sdl2_console *scon) ··· 39 37 QemuConsole *con = scon ? scon->dcl.con : NULL; 40 38 int i; 41 39 42 - for (i = 0; i < SDL_NUM_SCANCODES; i++) { 40 + for (i = 0 ; 41 + i < SDL_NUM_SCANCODES && i < qemu_input_map_usb_to_qcode_len ; 42 + i++) { 43 43 if (modifiers_state[i]) { 44 - int qcode = sdl2_scancode_to_qcode[i]; 44 + int qcode = qemu_input_map_usb_to_qcode[i]; 45 45 qemu_input_event_send_key_qcode(con, qcode, false); 46 46 modifiers_state[i] = 0; 47 47 } ··· 51 51 void sdl2_process_key(struct sdl2_console *scon, 52 52 SDL_KeyboardEvent *ev) 53 53 { 54 - int qcode = sdl2_scancode_to_qcode[ev->keysym.scancode]; 54 + int qcode; 55 55 QemuConsole *con = scon ? scon->dcl.con : NULL; 56 + 57 + if (ev->keysym.scancode >= qemu_input_map_usb_to_qcode_len) { 58 + return; 59 + } 60 + 61 + qcode = qemu_input_map_usb_to_qcode[ev->keysym.scancode]; 56 62 57 63 if (!qemu_console_is_graphic(con)) { 58 64 if (ev->type == SDL_KEYDOWN) {
-267
ui/sdl2-keymap.h
··· 1 - 2 - /* map SDL2 scancodes to QKeyCode */ 3 - 4 - static const int sdl2_scancode_to_qcode[SDL_NUM_SCANCODES] = { 5 - [SDL_SCANCODE_A] = Q_KEY_CODE_A, 6 - [SDL_SCANCODE_B] = Q_KEY_CODE_B, 7 - [SDL_SCANCODE_C] = Q_KEY_CODE_C, 8 - [SDL_SCANCODE_D] = Q_KEY_CODE_D, 9 - [SDL_SCANCODE_E] = Q_KEY_CODE_E, 10 - [SDL_SCANCODE_F] = Q_KEY_CODE_F, 11 - [SDL_SCANCODE_G] = Q_KEY_CODE_G, 12 - [SDL_SCANCODE_H] = Q_KEY_CODE_H, 13 - [SDL_SCANCODE_I] = Q_KEY_CODE_I, 14 - [SDL_SCANCODE_J] = Q_KEY_CODE_J, 15 - [SDL_SCANCODE_K] = Q_KEY_CODE_K, 16 - [SDL_SCANCODE_L] = Q_KEY_CODE_L, 17 - [SDL_SCANCODE_M] = Q_KEY_CODE_M, 18 - [SDL_SCANCODE_N] = Q_KEY_CODE_N, 19 - [SDL_SCANCODE_O] = Q_KEY_CODE_O, 20 - [SDL_SCANCODE_P] = Q_KEY_CODE_P, 21 - [SDL_SCANCODE_Q] = Q_KEY_CODE_Q, 22 - [SDL_SCANCODE_R] = Q_KEY_CODE_R, 23 - [SDL_SCANCODE_S] = Q_KEY_CODE_S, 24 - [SDL_SCANCODE_T] = Q_KEY_CODE_T, 25 - [SDL_SCANCODE_U] = Q_KEY_CODE_U, 26 - [SDL_SCANCODE_V] = Q_KEY_CODE_V, 27 - [SDL_SCANCODE_W] = Q_KEY_CODE_W, 28 - [SDL_SCANCODE_X] = Q_KEY_CODE_X, 29 - [SDL_SCANCODE_Y] = Q_KEY_CODE_Y, 30 - [SDL_SCANCODE_Z] = Q_KEY_CODE_Z, 31 - 32 - [SDL_SCANCODE_1] = Q_KEY_CODE_1, 33 - [SDL_SCANCODE_2] = Q_KEY_CODE_2, 34 - [SDL_SCANCODE_3] = Q_KEY_CODE_3, 35 - [SDL_SCANCODE_4] = Q_KEY_CODE_4, 36 - [SDL_SCANCODE_5] = Q_KEY_CODE_5, 37 - [SDL_SCANCODE_6] = Q_KEY_CODE_6, 38 - [SDL_SCANCODE_7] = Q_KEY_CODE_7, 39 - [SDL_SCANCODE_8] = Q_KEY_CODE_8, 40 - [SDL_SCANCODE_9] = Q_KEY_CODE_9, 41 - [SDL_SCANCODE_0] = Q_KEY_CODE_0, 42 - 43 - [SDL_SCANCODE_RETURN] = Q_KEY_CODE_RET, 44 - [SDL_SCANCODE_ESCAPE] = Q_KEY_CODE_ESC, 45 - [SDL_SCANCODE_BACKSPACE] = Q_KEY_CODE_BACKSPACE, 46 - [SDL_SCANCODE_TAB] = Q_KEY_CODE_TAB, 47 - [SDL_SCANCODE_SPACE] = Q_KEY_CODE_SPC, 48 - [SDL_SCANCODE_MINUS] = Q_KEY_CODE_MINUS, 49 - [SDL_SCANCODE_EQUALS] = Q_KEY_CODE_EQUAL, 50 - [SDL_SCANCODE_LEFTBRACKET] = Q_KEY_CODE_BRACKET_LEFT, 51 - [SDL_SCANCODE_RIGHTBRACKET] = Q_KEY_CODE_BRACKET_RIGHT, 52 - [SDL_SCANCODE_BACKSLASH] = Q_KEY_CODE_BACKSLASH, 53 - #if 0 54 - [SDL_SCANCODE_NONUSHASH] = Q_KEY_CODE_NONUSHASH, 55 - #endif 56 - [SDL_SCANCODE_SEMICOLON] = Q_KEY_CODE_SEMICOLON, 57 - [SDL_SCANCODE_APOSTROPHE] = Q_KEY_CODE_APOSTROPHE, 58 - [SDL_SCANCODE_GRAVE] = Q_KEY_CODE_GRAVE_ACCENT, 59 - [SDL_SCANCODE_COMMA] = Q_KEY_CODE_COMMA, 60 - [SDL_SCANCODE_PERIOD] = Q_KEY_CODE_DOT, 61 - [SDL_SCANCODE_SLASH] = Q_KEY_CODE_SLASH, 62 - [SDL_SCANCODE_CAPSLOCK] = Q_KEY_CODE_CAPS_LOCK, 63 - 64 - [SDL_SCANCODE_F1] = Q_KEY_CODE_F1, 65 - [SDL_SCANCODE_F2] = Q_KEY_CODE_F2, 66 - [SDL_SCANCODE_F3] = Q_KEY_CODE_F3, 67 - [SDL_SCANCODE_F4] = Q_KEY_CODE_F4, 68 - [SDL_SCANCODE_F5] = Q_KEY_CODE_F5, 69 - [SDL_SCANCODE_F6] = Q_KEY_CODE_F6, 70 - [SDL_SCANCODE_F7] = Q_KEY_CODE_F7, 71 - [SDL_SCANCODE_F8] = Q_KEY_CODE_F8, 72 - [SDL_SCANCODE_F9] = Q_KEY_CODE_F9, 73 - [SDL_SCANCODE_F10] = Q_KEY_CODE_F10, 74 - [SDL_SCANCODE_F11] = Q_KEY_CODE_F11, 75 - [SDL_SCANCODE_F12] = Q_KEY_CODE_F12, 76 - 77 - [SDL_SCANCODE_PRINTSCREEN] = Q_KEY_CODE_PRINT, 78 - [SDL_SCANCODE_SCROLLLOCK] = Q_KEY_CODE_SCROLL_LOCK, 79 - [SDL_SCANCODE_PAUSE] = Q_KEY_CODE_PAUSE, 80 - [SDL_SCANCODE_INSERT] = Q_KEY_CODE_INSERT, 81 - [SDL_SCANCODE_HOME] = Q_KEY_CODE_HOME, 82 - [SDL_SCANCODE_PAGEUP] = Q_KEY_CODE_PGUP, 83 - [SDL_SCANCODE_DELETE] = Q_KEY_CODE_DELETE, 84 - [SDL_SCANCODE_END] = Q_KEY_CODE_END, 85 - [SDL_SCANCODE_PAGEDOWN] = Q_KEY_CODE_PGDN, 86 - [SDL_SCANCODE_RIGHT] = Q_KEY_CODE_RIGHT, 87 - [SDL_SCANCODE_LEFT] = Q_KEY_CODE_LEFT, 88 - [SDL_SCANCODE_DOWN] = Q_KEY_CODE_DOWN, 89 - [SDL_SCANCODE_UP] = Q_KEY_CODE_UP, 90 - [SDL_SCANCODE_NUMLOCKCLEAR] = Q_KEY_CODE_NUM_LOCK, 91 - 92 - [SDL_SCANCODE_KP_DIVIDE] = Q_KEY_CODE_KP_DIVIDE, 93 - [SDL_SCANCODE_KP_MULTIPLY] = Q_KEY_CODE_KP_MULTIPLY, 94 - [SDL_SCANCODE_KP_MINUS] = Q_KEY_CODE_KP_SUBTRACT, 95 - [SDL_SCANCODE_KP_PLUS] = Q_KEY_CODE_KP_ADD, 96 - [SDL_SCANCODE_KP_ENTER] = Q_KEY_CODE_KP_ENTER, 97 - [SDL_SCANCODE_KP_1] = Q_KEY_CODE_KP_1, 98 - [SDL_SCANCODE_KP_2] = Q_KEY_CODE_KP_2, 99 - [SDL_SCANCODE_KP_3] = Q_KEY_CODE_KP_3, 100 - [SDL_SCANCODE_KP_4] = Q_KEY_CODE_KP_4, 101 - [SDL_SCANCODE_KP_5] = Q_KEY_CODE_KP_5, 102 - [SDL_SCANCODE_KP_6] = Q_KEY_CODE_KP_6, 103 - [SDL_SCANCODE_KP_7] = Q_KEY_CODE_KP_7, 104 - [SDL_SCANCODE_KP_8] = Q_KEY_CODE_KP_8, 105 - [SDL_SCANCODE_KP_9] = Q_KEY_CODE_KP_9, 106 - [SDL_SCANCODE_KP_0] = Q_KEY_CODE_KP_0, 107 - [SDL_SCANCODE_KP_PERIOD] = Q_KEY_CODE_KP_DECIMAL, 108 - 109 - [SDL_SCANCODE_NONUSBACKSLASH] = Q_KEY_CODE_LESS, 110 - [SDL_SCANCODE_APPLICATION] = Q_KEY_CODE_MENU, 111 - #if 0 112 - [SDL_SCANCODE_POWER] = Q_KEY_CODE_POWER, 113 - [SDL_SCANCODE_KP_EQUALS] = Q_KEY_CODE_KP_EQUALS, 114 - 115 - [SDL_SCANCODE_F13] = Q_KEY_CODE_F13, 116 - [SDL_SCANCODE_F14] = Q_KEY_CODE_F14, 117 - [SDL_SCANCODE_F15] = Q_KEY_CODE_F15, 118 - [SDL_SCANCODE_F16] = Q_KEY_CODE_F16, 119 - [SDL_SCANCODE_F17] = Q_KEY_CODE_F17, 120 - [SDL_SCANCODE_F18] = Q_KEY_CODE_F18, 121 - [SDL_SCANCODE_F19] = Q_KEY_CODE_F19, 122 - [SDL_SCANCODE_F20] = Q_KEY_CODE_F20, 123 - [SDL_SCANCODE_F21] = Q_KEY_CODE_F21, 124 - [SDL_SCANCODE_F22] = Q_KEY_CODE_F22, 125 - [SDL_SCANCODE_F23] = Q_KEY_CODE_F23, 126 - [SDL_SCANCODE_F24] = Q_KEY_CODE_F24, 127 - 128 - [SDL_SCANCODE_EXECUTE] = Q_KEY_CODE_EXECUTE, 129 - #endif 130 - [SDL_SCANCODE_HELP] = Q_KEY_CODE_HELP, 131 - [SDL_SCANCODE_MENU] = Q_KEY_CODE_MENU, 132 - #if 0 133 - [SDL_SCANCODE_SELECT] = Q_KEY_CODE_SELECT, 134 - #endif 135 - [SDL_SCANCODE_STOP] = Q_KEY_CODE_STOP, 136 - [SDL_SCANCODE_AGAIN] = Q_KEY_CODE_AGAIN, 137 - [SDL_SCANCODE_UNDO] = Q_KEY_CODE_UNDO, 138 - [SDL_SCANCODE_CUT] = Q_KEY_CODE_CUT, 139 - [SDL_SCANCODE_COPY] = Q_KEY_CODE_COPY, 140 - [SDL_SCANCODE_PASTE] = Q_KEY_CODE_PASTE, 141 - [SDL_SCANCODE_FIND] = Q_KEY_CODE_FIND, 142 - #if 0 143 - [SDL_SCANCODE_MUTE] = Q_KEY_CODE_MUTE, 144 - [SDL_SCANCODE_VOLUMEUP] = Q_KEY_CODE_VOLUMEUP, 145 - [SDL_SCANCODE_VOLUMEDOWN] = Q_KEY_CODE_VOLUMEDOWN, 146 - 147 - [SDL_SCANCODE_KP_COMMA] = Q_KEY_CODE_KP_COMMA, 148 - [SDL_SCANCODE_KP_EQUALSAS400] = Q_KEY_CODE_KP_EQUALSAS400, 149 - 150 - [SDL_SCANCODE_INTERNATIONAL1] = Q_KEY_CODE_INTERNATIONAL1, 151 - [SDL_SCANCODE_INTERNATIONAL2] = Q_KEY_CODE_INTERNATIONAL2, 152 - [SDL_SCANCODE_INTERNATIONAL3] = Q_KEY_CODE_INTERNATIONAL3, 153 - [SDL_SCANCODE_INTERNATIONAL4] = Q_KEY_CODE_INTERNATIONAL4, 154 - [SDL_SCANCODE_INTERNATIONAL5] = Q_KEY_CODE_INTERNATIONAL5, 155 - [SDL_SCANCODE_INTERNATIONAL6] = Q_KEY_CODE_INTERNATIONAL6, 156 - [SDL_SCANCODE_INTERNATIONAL7] = Q_KEY_CODE_INTERNATIONAL7, 157 - [SDL_SCANCODE_INTERNATIONAL8] = Q_KEY_CODE_INTERNATIONAL8, 158 - [SDL_SCANCODE_INTERNATIONAL9] = Q_KEY_CODE_INTERNATIONAL9, 159 - [SDL_SCANCODE_LANG1] = Q_KEY_CODE_LANG1, 160 - [SDL_SCANCODE_LANG2] = Q_KEY_CODE_LANG2, 161 - [SDL_SCANCODE_LANG3] = Q_KEY_CODE_LANG3, 162 - [SDL_SCANCODE_LANG4] = Q_KEY_CODE_LANG4, 163 - [SDL_SCANCODE_LANG5] = Q_KEY_CODE_LANG5, 164 - [SDL_SCANCODE_LANG6] = Q_KEY_CODE_LANG6, 165 - [SDL_SCANCODE_LANG7] = Q_KEY_CODE_LANG7, 166 - [SDL_SCANCODE_LANG8] = Q_KEY_CODE_LANG8, 167 - [SDL_SCANCODE_LANG9] = Q_KEY_CODE_LANG9, 168 - [SDL_SCANCODE_ALTERASE] = Q_KEY_CODE_ALTERASE, 169 - #endif 170 - [SDL_SCANCODE_SYSREQ] = Q_KEY_CODE_SYSRQ, 171 - #if 0 172 - [SDL_SCANCODE_CANCEL] = Q_KEY_CODE_CANCEL, 173 - [SDL_SCANCODE_CLEAR] = Q_KEY_CODE_CLEAR, 174 - [SDL_SCANCODE_PRIOR] = Q_KEY_CODE_PRIOR, 175 - [SDL_SCANCODE_RETURN2] = Q_KEY_CODE_RETURN2, 176 - [SDL_SCANCODE_SEPARATOR] = Q_KEY_CODE_SEPARATOR, 177 - [SDL_SCANCODE_OUT] = Q_KEY_CODE_OUT, 178 - [SDL_SCANCODE_OPER] = Q_KEY_CODE_OPER, 179 - [SDL_SCANCODE_CLEARAGAIN] = Q_KEY_CODE_CLEARAGAIN, 180 - [SDL_SCANCODE_CRSEL] = Q_KEY_CODE_CRSEL, 181 - [SDL_SCANCODE_EXSEL] = Q_KEY_CODE_EXSEL, 182 - [SDL_SCANCODE_KP_00] = Q_KEY_CODE_KP_00, 183 - [SDL_SCANCODE_KP_000] = Q_KEY_CODE_KP_000, 184 - [SDL_SCANCODE_THOUSANDSSEPARATOR] = Q_KEY_CODE_THOUSANDSSEPARATOR, 185 - [SDL_SCANCODE_DECIMALSEPARATOR] = Q_KEY_CODE_DECIMALSEPARATOR, 186 - [SDL_SCANCODE_CURRENCYUNIT] = Q_KEY_CODE_CURRENCYUNIT, 187 - [SDL_SCANCODE_CURRENCYSUBUNIT] = Q_KEY_CODE_CURRENCYSUBUNIT, 188 - [SDL_SCANCODE_KP_LEFTPAREN] = Q_KEY_CODE_KP_LEFTPAREN, 189 - [SDL_SCANCODE_KP_RIGHTPAREN] = Q_KEY_CODE_KP_RIGHTPAREN, 190 - [SDL_SCANCODE_KP_LEFTBRACE] = Q_KEY_CODE_KP_LEFTBRACE, 191 - [SDL_SCANCODE_KP_RIGHTBRACE] = Q_KEY_CODE_KP_RIGHTBRACE, 192 - [SDL_SCANCODE_KP_TAB] = Q_KEY_CODE_KP_TAB, 193 - [SDL_SCANCODE_KP_BACKSPACE] = Q_KEY_CODE_KP_BACKSPACE, 194 - [SDL_SCANCODE_KP_A] = Q_KEY_CODE_KP_A, 195 - [SDL_SCANCODE_KP_B] = Q_KEY_CODE_KP_B, 196 - [SDL_SCANCODE_KP_C] = Q_KEY_CODE_KP_C, 197 - [SDL_SCANCODE_KP_D] = Q_KEY_CODE_KP_D, 198 - [SDL_SCANCODE_KP_E] = Q_KEY_CODE_KP_E, 199 - [SDL_SCANCODE_KP_F] = Q_KEY_CODE_KP_F, 200 - [SDL_SCANCODE_KP_XOR] = Q_KEY_CODE_KP_XOR, 201 - [SDL_SCANCODE_KP_POWER] = Q_KEY_CODE_KP_POWER, 202 - [SDL_SCANCODE_KP_PERCENT] = Q_KEY_CODE_KP_PERCENT, 203 - [SDL_SCANCODE_KP_LESS] = Q_KEY_CODE_KP_LESS, 204 - [SDL_SCANCODE_KP_GREATER] = Q_KEY_CODE_KP_GREATER, 205 - [SDL_SCANCODE_KP_AMPERSAND] = Q_KEY_CODE_KP_AMPERSAND, 206 - [SDL_SCANCODE_KP_DBLAMPERSAND] = Q_KEY_CODE_KP_DBLAMPERSAND, 207 - [SDL_SCANCODE_KP_VERTICALBAR] = Q_KEY_CODE_KP_VERTICALBAR, 208 - [SDL_SCANCODE_KP_DBLVERTICALBAR] = Q_KEY_CODE_KP_DBLVERTICALBAR, 209 - [SDL_SCANCODE_KP_COLON] = Q_KEY_CODE_KP_COLON, 210 - [SDL_SCANCODE_KP_HASH] = Q_KEY_CODE_KP_HASH, 211 - [SDL_SCANCODE_KP_SPACE] = Q_KEY_CODE_KP_SPACE, 212 - [SDL_SCANCODE_KP_AT] = Q_KEY_CODE_KP_AT, 213 - [SDL_SCANCODE_KP_EXCLAM] = Q_KEY_CODE_KP_EXCLAM, 214 - [SDL_SCANCODE_KP_MEMSTORE] = Q_KEY_CODE_KP_MEMSTORE, 215 - [SDL_SCANCODE_KP_MEMRECALL] = Q_KEY_CODE_KP_MEMRECALL, 216 - [SDL_SCANCODE_KP_MEMCLEAR] = Q_KEY_CODE_KP_MEMCLEAR, 217 - [SDL_SCANCODE_KP_MEMADD] = Q_KEY_CODE_KP_MEMADD, 218 - [SDL_SCANCODE_KP_MEMSUBTRACT] = Q_KEY_CODE_KP_MEMSUBTRACT, 219 - [SDL_SCANCODE_KP_MEMMULTIPLY] = Q_KEY_CODE_KP_MEMMULTIPLY, 220 - [SDL_SCANCODE_KP_MEMDIVIDE] = Q_KEY_CODE_KP_MEMDIVIDE, 221 - [SDL_SCANCODE_KP_PLUSMINUS] = Q_KEY_CODE_KP_PLUSMINUS, 222 - [SDL_SCANCODE_KP_CLEAR] = Q_KEY_CODE_KP_CLEAR, 223 - [SDL_SCANCODE_KP_CLEARENTRY] = Q_KEY_CODE_KP_CLEARENTRY, 224 - [SDL_SCANCODE_KP_BINARY] = Q_KEY_CODE_KP_BINARY, 225 - [SDL_SCANCODE_KP_OCTAL] = Q_KEY_CODE_KP_OCTAL, 226 - [SDL_SCANCODE_KP_DECIMAL] = Q_KEY_CODE_KP_DECIMAL, 227 - [SDL_SCANCODE_KP_HEXADECIMAL] = Q_KEY_CODE_KP_HEXADECIMAL, 228 - #endif 229 - [SDL_SCANCODE_LCTRL] = Q_KEY_CODE_CTRL, 230 - [SDL_SCANCODE_LSHIFT] = Q_KEY_CODE_SHIFT, 231 - [SDL_SCANCODE_LALT] = Q_KEY_CODE_ALT, 232 - [SDL_SCANCODE_LGUI] = Q_KEY_CODE_META_L, 233 - [SDL_SCANCODE_RCTRL] = Q_KEY_CODE_CTRL_R, 234 - [SDL_SCANCODE_RSHIFT] = Q_KEY_CODE_SHIFT_R, 235 - [SDL_SCANCODE_RALT] = Q_KEY_CODE_ALT_R, 236 - [SDL_SCANCODE_RGUI] = Q_KEY_CODE_META_R, 237 - #if 0 238 - [SDL_SCANCODE_MODE] = Q_KEY_CODE_MODE, 239 - [SDL_SCANCODE_AUDIONEXT] = Q_KEY_CODE_AUDIONEXT, 240 - [SDL_SCANCODE_AUDIOPREV] = Q_KEY_CODE_AUDIOPREV, 241 - [SDL_SCANCODE_AUDIOSTOP] = Q_KEY_CODE_AUDIOSTOP, 242 - [SDL_SCANCODE_AUDIOPLAY] = Q_KEY_CODE_AUDIOPLAY, 243 - [SDL_SCANCODE_AUDIOMUTE] = Q_KEY_CODE_AUDIOMUTE, 244 - [SDL_SCANCODE_MEDIASELECT] = Q_KEY_CODE_MEDIASELECT, 245 - [SDL_SCANCODE_WWW] = Q_KEY_CODE_WWW, 246 - [SDL_SCANCODE_MAIL] = Q_KEY_CODE_MAIL, 247 - [SDL_SCANCODE_CALCULATOR] = Q_KEY_CODE_CALCULATOR, 248 - [SDL_SCANCODE_COMPUTER] = Q_KEY_CODE_COMPUTER, 249 - [SDL_SCANCODE_AC_SEARCH] = Q_KEY_CODE_AC_SEARCH, 250 - [SDL_SCANCODE_AC_HOME] = Q_KEY_CODE_AC_HOME, 251 - [SDL_SCANCODE_AC_BACK] = Q_KEY_CODE_AC_BACK, 252 - [SDL_SCANCODE_AC_FORWARD] = Q_KEY_CODE_AC_FORWARD, 253 - [SDL_SCANCODE_AC_STOP] = Q_KEY_CODE_AC_STOP, 254 - [SDL_SCANCODE_AC_REFRESH] = Q_KEY_CODE_AC_REFRESH, 255 - [SDL_SCANCODE_AC_BOOKMARKS] = Q_KEY_CODE_AC_BOOKMARKS, 256 - [SDL_SCANCODE_BRIGHTNESSDOWN] = Q_KEY_CODE_BRIGHTNESSDOWN, 257 - [SDL_SCANCODE_BRIGHTNESSUP] = Q_KEY_CODE_BRIGHTNESSUP, 258 - [SDL_SCANCODE_DISPLAYSWITCH] = Q_KEY_CODE_DISPLAYSWITCH, 259 - [SDL_SCANCODE_KBDILLUMTOGGLE] = Q_KEY_CODE_KBDILLUMTOGGLE, 260 - [SDL_SCANCODE_KBDILLUMDOWN] = Q_KEY_CODE_KBDILLUMDOWN, 261 - [SDL_SCANCODE_KBDILLUMUP] = Q_KEY_CODE_KBDILLUMUP, 262 - [SDL_SCANCODE_EJECT] = Q_KEY_CODE_EJECT, 263 - [SDL_SCANCODE_SLEEP] = Q_KEY_CODE_SLEEP, 264 - [SDL_SCANCODE_APP1] = Q_KEY_CODE_APP1, 265 - [SDL_SCANCODE_APP2] = Q_KEY_CODE_APP2, 266 - #endif 267 - };