From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=37009 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pl6qP-0004d2-Mg for qemu-devel@nongnu.org; Thu, 03 Feb 2011 16:36:26 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pl6q2-0003VW-AK for qemu-devel@nongnu.org; Thu, 03 Feb 2011 16:35:39 -0500 Received: from moutng.kundenserver.de ([212.227.17.8]:62313) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pl6q1-0003UH-TU for qemu-devel@nongnu.org; Thu, 03 Feb 2011 16:35:38 -0500 From: Stefan Weil Date: Thu, 3 Feb 2011 22:35:07 +0100 Message-Id: <1296768907-12798-1-git-send-email-weil@mail.berlios.de> In-Reply-To: <1290901711.2438.34.camel@deep-thought> References: <1290901711.2438.34.camel@deep-thought> Subject: [Qemu-devel] [PATCH 0.14] ui/sdl: Fix handling of caps lock and num lock keys List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: QEMU Developers Cc: Kevin Wolf , Anthony Liguori , Benjamin Drung Starting with SDL version 1.2.14, caps lock and num lock keys will send a SDL_KEYUP when SDL_DISABLE_LOCK_KEYS=1 is set in the environment. The new code sets the environment unconditionally (it won't harm old versions which do not know it). The workaround for SDL_KEYUP is only compiled with old SDL versions. A similar patch without handling of old SDL versions was already published by Benjamin Drung for Ubuntu. Cc: Anthony Liguori Cc: Kevin Wolf Cc: Benjamin Drung Signed-off-by: Stefan Weil --- ui/sdl.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/ui/sdl.c b/ui/sdl.c index a1458ce..47ac49c 100644 --- a/ui/sdl.c +++ b/ui/sdl.c @@ -388,12 +388,16 @@ static void sdl_process_key(SDL_KeyboardEvent *ev) else modifiers_state[keycode] = 1; break; +#define QEMU_SDL_VERSION ((SDL_MAJOR_VERSION << 8) + SDL_MINOR_VERSION) +#if QEMU_SDL_VERSION < 0x102 || QEMU_SDL_VERSION == 0x102 && SDL_PATCHLEVEL < 14 + /* SDL versions before 1.2.14 don't support key up for caps/num lock. */ case 0x45: /* num lock */ case 0x3a: /* caps lock */ /* SDL does not send the key up event, so we generate it */ kbd_put_keycode(keycode); kbd_put_keycode(keycode | SCANCODE_UP); return; +#endif } /* now send the key code */ @@ -831,6 +835,10 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame) setenv("SDL_VIDEO_ALLOW_SCREENSAVER", "1", 0); } + /* Enable normal up/down events for Caps-Lock and Num-Lock keys. + * This requires SDL >= 1.2.14. */ + setenv("SDL_DISABLE_LOCK_KEYS", "1", 1); + flags = SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE; if (SDL_Init (flags)) { fprintf(stderr, "Could not initialize SDL(%s) - exiting\n", -- 1.7.2.3