From c719fda49e8c8eb496a9f46a48297f09a43a560b Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 26 Feb 2008 10:50:28 +0000 Subject: [PATCH] Date: Tue, 05 Feb 2008 01:41:08 -0500 From: Mike Miscevic Subject: SDL and capslock/numlock Find attached a patch against SDL-1.2.13 for check of SDL_NO_LOCK_KEYS environment variable. This differs slightly from other patches I've seen in that it has 3 modes: Disable CAPS-LOCK and NUM-LOCK supression of down+up key events, suitable for games where the player needs these keys to do more than just toggle. A value of 1 will effect both CAPS-LOCK and NUM-LOCK. A value of 2 will effect only CAPS-LOCK. A value of 3 will effect only NUM-LOCK. All other values have no effect. This works for me and has been tested on: - Fedora 8 64-bit - SRCRPM SDL-1.2.13-1.fc8.src.rpm - Emeny Territory Quake Wars (ETQW), native 32-bit commercial game --Mike Miscevic --- docs/html/sdlenvvars.html | 15 +++++++++++++++ src/events/SDL_keyboard.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/docs/html/sdlenvvars.html b/docs/html/sdlenvvars.html index 4e677cdc8..e67a50f4e 100644 --- a/docs/html/sdlenvvars.html +++ b/docs/html/sdlenvvars.html @@ -670,6 +670,21 @@ >

If set, the linux fbcon driver will not use a mouse at all.

SDL_NO_LOCK_KEYS

Disable CAPS-LOCK and NUM-LOCK suppression of down+up key events, +suitable for games where the player needs these keys to do more than just toggle. +A value of 1 will effect both CAPS-LOCK and NUM-LOCK. +A value of 2 will effect only CAPS-LOCK. +A value of 3 will effect only NUM-LOCK. +All other values have no effect. +

sym), break; case SDLK_NUMLOCK: modstate ^= KMOD_NUM; + if ( SDL_NoLockKeys & SDL_NLK_NUM ) + break; if ( ! (modstate&KMOD_NUM) ) state = SDL_RELEASED; keysym->mod = (SDLMod)modstate; break; case SDLK_CAPSLOCK: modstate ^= KMOD_CAPS; + if ( SDL_NoLockKeys & SDL_NLK_CAPS ) + break; if ( ! (modstate&KMOD_CAPS) ) state = SDL_RELEASED; keysym->mod = (SDLMod)modstate; @@ -440,7 +470,13 @@ printf("The '%s' key has been %s\n", SDL_GetKeyName(keysym->sym), case SDLK_UNKNOWN: break; case SDLK_NUMLOCK: + if ( SDL_NoLockKeys & SDL_NLK_NUM ) + break; + /* Only send keydown events */ + return(0); case SDLK_CAPSLOCK: + if ( SDL_NoLockKeys & SDL_NLK_CAPS ) + break; /* Only send keydown events */ return(0); case SDLK_LCTRL: