--- src/events/SDL_keyboard.c | 10 ++++++++++ 1 file changed, 10 insertions(+) --- a/src/events/SDL_keyboard.c +++ b/src/events/SDL_keyboard.c @@ -32,6 +32,7 @@ /* Global keystate information */ static Uint8 SDL_KeyState[SDLK_LAST]; static SDLMod SDL_ModState; +static char *SDL_UseLockKeys; int SDL_TranslateUNICODE = 0; static const char *keynames[SDLK_LAST]; /* Array of keycode names */ @@ -64,6 +65,7 @@ video->InitOSKeymap(this); SDL_EnableKeyRepeat(0, 0); + SDL_UseLockKeys = getenv("SDL_DISABLE_LOCK_KEYS"); /* Fill in the blanks in keynames */ keynames[SDLK_BACKSPACE] = "backspace"; @@ -375,6 +377,7 @@ SDL_Event event; int posted, repeatable; Uint16 modstate; + int use_lock_keys; SDL_memset(&event, 0, sizeof(event)); @@ -386,6 +389,7 @@ modstate = (Uint16)SDL_ModState; repeatable = 0; + use_lock_keys = ( SDL_UseLockKeys && *SDL_UseLockKeys ); if ( state == SDL_PRESSED ) { keysym->mod = (SDLMod)modstate; @@ -393,12 +397,16 @@ case SDLK_UNKNOWN: break; case SDLK_NUMLOCK: + if ( ! use_lock_keys ) + break; modstate ^= KMOD_NUM; if ( ! (modstate&KMOD_NUM) ) state = SDL_RELEASED; keysym->mod = (SDLMod)modstate; break; case SDLK_CAPSLOCK: + if ( ! use_lock_keys ) + break; modstate ^= KMOD_CAPS; if ( ! (modstate&KMOD_CAPS) ) state = SDL_RELEASED; @@ -441,6 +449,8 @@ break; case SDLK_NUMLOCK: case SDLK_CAPSLOCK: + if (! use_lock_keys ) + break; /* Only send keydown events */ return(0); case SDLK_LCTRL: