mirror of
https://github.com/yawut/SDL.git
synced 2026-10-02 05:06:46 -05:00
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 --HG-- branch : SDL-1.2
This commit is contained in:
@@ -670,6 +670,21 @@ CLASS="LITERAL"
|
||||
><P
|
||||
>If set, the linux fbcon driver will not use a mouse at all.</P
|
||||
></DD
|
||||
><DT
|
||||
><TT
|
||||
CLASS="LITERAL"
|
||||
>SDL_NO_LOCK_KEYS</TT
|
||||
></DT
|
||||
><DD
|
||||
><P
|
||||
>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.
|
||||
</P
|
||||
></DD
|
||||
></DL
|
||||
></DIV
|
||||
></DIV
|
||||
|
||||
@@ -48,9 +48,16 @@ struct {
|
||||
SDL_Event evt; /* the event we are supposed to repeat */
|
||||
} SDL_KeyRepeat;
|
||||
|
||||
/* Global no-lock-keys support */
|
||||
static Uint8 SDL_NoLockKeys;
|
||||
|
||||
#define SDL_NLK_CAPS 0x01
|
||||
#define SDL_NLK_NUM 0x02
|
||||
|
||||
/* Public functions */
|
||||
int SDL_KeyboardInit(void)
|
||||
{
|
||||
const char* env;
|
||||
SDL_VideoDevice *video = current_video;
|
||||
SDL_VideoDevice *this = current_video;
|
||||
|
||||
@@ -65,6 +72,25 @@ int SDL_KeyboardInit(void)
|
||||
|
||||
SDL_EnableKeyRepeat(0, 0);
|
||||
|
||||
/* Allow environment override to disable special lock-key behavior */
|
||||
env = getenv("SDL_NO_LOCK_KEYS");
|
||||
SDL_NoLockKeys = 0;
|
||||
if (env) {
|
||||
switch (SDL_atoi(env)) {
|
||||
case 1:
|
||||
SDL_NoLockKeys = SDL_NLK_CAPS | SDL_NLK_NUM;
|
||||
break;
|
||||
case 2:
|
||||
SDL_NoLockKeys = SDL_NLK_CAPS;
|
||||
break;
|
||||
case 3:
|
||||
SDL_NoLockKeys = SDL_NLK_NUM;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Fill in the blanks in keynames */
|
||||
keynames[SDLK_BACKSPACE] = "backspace";
|
||||
keynames[SDLK_TAB] = "tab";
|
||||
@@ -394,12 +420,16 @@ printf("The '%s' key has been %s\n", SDL_GetKeyName(keysym->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:
|
||||
|
||||
Reference in New Issue
Block a user