--- SDL-1.2.10/src/events/SDL_keyboard.c.lock 2006-05-04 07:06:02.000000000 +0200 +++ SDL-1.2.10/src/events/SDL_keyboard.c 2006-05-20 17:22:14.000000000 +0200 @@ -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 @@ int SDL_KeyboardInit(void) 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 @@ int SDL_PrivateKeyboard(Uint8 state, SDL SDL_Event event; int posted, repeatable; Uint16 modstate; + int use_lock_keys; SDL_memset(&event, 0, sizeof(event)); @@ -386,6 +389,7 @@ printf("The '%s' key has been %s\n", SDL 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 @@ printf("The '%s' key has been %s\n", SDL 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 @@ printf("The '%s' key has been %s\n", SDL break; case SDLK_NUMLOCK: case SDLK_CAPSLOCK: + if (! use_lock_keys ) + break; /* Only send keydown events */ return(0); case SDLK_LCTRL: