Skip to contentSkip to conversation

Fix virtual console switching with SDL on Mac OS X

PATCH In review Christian Walther 2 participants 4 messages Jul 22, 2005 – Jul 23, 2005

lore
Share & tools
lore
#0 lore raw

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
diff -u -r1.21 sdl.c
@@ -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);
#1 lore raw
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.c rev. 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.
#2 lore raw
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.c rev. 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

#3 lore raw
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 the SDLK_xxx constants), 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.