Fix virtual console switching with SDL on Mac OS X
PATCH 1/1 Fix virtual console switching with SDL on Mac OS X
Has switching virtual consoles actually been broken with SDL on non-X11, non-win32 platforms (i.e. Mac OS X) for 7 months without anyone noticing ?? Anyway, here's a patch that fixes it. Just a small change that was forgotten in the keymaps support (sdl.c rev. 1.20). Applies to current CVS as well as 0.7.0.
-Christian
Index: sdl.c
===================================================================
RCS file: /cvsroot/qemu/qemu/sdl.c,v
retrieving revision 1.21
sdl.c +5 -1
@@ -334,7 +334,11 @@ gui_key_modifier_pressed = mod_state;if (gui_key_modifier_pressed) {int keycode; - keycode =sdl_keyevent_to_keycode (&ev->key); +if (kbd_layout) { + keycode =sdl_keyevent_to_keycode_generic (&ev->key); + }else { + keycode =sdl_keyevent_to_keycode (&ev->key); + }switch (keycode) {case 0x21 :/* 'f' key on US keyboard */ toggle_full_screen (ds);
Quoted 7 lines · Christian Walther
Has switching virtual consoles actually been broken with SDL on non-X11, non-win32 platforms (i.e. Mac OS X) for 7 months without anyone noticing ?? Anyway, here's a patch that fixes it. Just a small change that was forgotten in the keymaps support (
sdl.crev. 1.20). Applies to current CVS as well as 0.7.0.-Christian
Interesting.
Looks like the bug affects X11 and W32 as well, if you are not using a US keymap.
Signature · 2 lines
Infinite complexity begets infinite beauty. Infinite precision begets infinite perfection.
Quoted 11 lines · Jim C. Brown
Quoted 3 lines · Christian Walther
Has switching virtual consoles actually been broken with SDL on non-X11, non-win32 platforms (i.e. Mac OS X) for 7 months without anyone noticing ?? Anyway, here's a patch that fixes it. Just a small change that was forgotten in the keymaps support (
sdl.crev. 1.20). Applies to current CVS as well as 0.7.0.-Christian
Interesting.
Looks like the bug affects X11 and W32 as well, if you are not using a US keymap.
I don't think so. The non-keymap code that was used before my patch (sdl_keyevent_to_keycode()) uses event.key.keysym.scancode, which is platform-dependent, but refers to the location of the keys, not their value under the current keyboard mapping (apparently X keycodes on X11, PC keycodes on Windows, ADB keycodes on Mac OS). The with-keymap code (sdl_keyevent_to_keycode_generic()) on the other hand uses event.key.keysym.sym (one of the SDLK_xxx constants), which is affected by the OS's keyboard mapping. (Although IMHO it shouldn't be, but when that topic was brought up on the SDL mailing list, the answer IIRC was that that would be too difficult to fix on all platforms supported by SDL. I'm not convinced by that, but I didn't investigate any further at that time.)
It's just that in sdl_keyevent_to_keycode, the X11 and win32 cases are handled, but not the Mac OS case.
-Christian
Quoted 3 lines · Christian Walther
Quoted 2 lines
Looks like the bug affects X11 and W32 as well, if you are not using a US keymap.
Oops, I meant only X11, as W32 doesnt use qemu's keymaps. Only the X11 SDL driver, and the not-yet-committed X11 GTK driver, use it.
Quoted 5 lines
I don't think so. The non-keymap code that was used before my patch (
sdl_keyevent_to_keycode()) uses event.key.keysym.scancode, which is platform-dependent, but refers to the location of the keys, not their value under the current keyboard mapping (apparently X keycodes on X11, PC keycodes on Windows, ADB keycodes on Mac OS).
Well, the X keycodes returned actually do change depending on what kind of hardware keyboard you are using.
But if eveyone was running SDL under X11 with PC keyboards, then it is possible that no one would have noticed. I'll have to investigate how keycodes and X11 keysyms are handled further.
Quoted 4 lines
The with-keymap code
(sdl_keyevent_to_keycode_generic()) on the other hand uses event.key.keysym.sym (one of theSDLK_xxxconstants), which is affected by the OS's keyboard mapping.
Which is converted back into a raw X11 keycode, based on the given keymap file passed via "-k keymap".
So for the bug to not affect X11, the keycode in the keymap file and the keycode returned by SDL would have to be the same, or at least map to the same character. Curious.
Signature · 2 lines
Infinite complexity begets infinite beauty. Infinite precision begets infinite perfection.