diff --git a/code/client/cl_keys.c b/code/client/cl_keys.c index fe6f13c1..17bed13e 100644 --- a/code/client/cl_keys.c +++ b/code/client/cl_keys.c @@ -1175,7 +1175,7 @@ void CL_KeyDownEvent( int key, unsigned time ) { keys[key].down = qtrue; keys[key].repeats++; - if( keys[key].repeats == 1 ) + if( keys[key].repeats == 1 && key != K_SCROLLOCK && key != K_KP_NUMLOCK && key != K_CAPSLOCK ) anykeydown++; if( keys[K_ALT].down && key == K_ENTER ) @@ -1268,7 +1268,9 @@ void CL_KeyUpEvent( int key, unsigned time ) { keys[key].repeats = 0; keys[key].down = qfalse; - anykeydown--; + if (key != K_SCROLLOCK && key != K_KP_NUMLOCK && key != K_CAPSLOCK) + anykeydown--; + if (anykeydown < 0) { anykeydown = 0; } @@ -1353,6 +1355,9 @@ void Key_ClearStates (void) anykeydown = 0; for ( i=0 ; i < MAX_KEYS ; i++ ) { + if (i == K_SCROLLOCK || i == K_KP_NUMLOCK || i == K_CAPSLOCK) + continue; + if ( keys[i].down ) { CL_KeyEvent( i, qfalse, 0 ); diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index 7d28eeec..a3f72662 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -980,6 +980,20 @@ void IN_Frame( void ) } } +/* +=============== +IN_InitKeyLockStates +=============== +*/ +void IN_InitKeyLockStates( void ) +{ + unsigned char *keystate = SDL_GetKeyState(NULL); + + keys[K_SCROLLOCK].down = keystate[SDLK_SCROLLOCK]; + keys[K_KP_NUMLOCK].down = keystate[SDLK_NUMLOCK]; + keys[K_CAPSLOCK].down = keystate[SDLK_CAPSLOCK]; +} + /* =============== IN_Init @@ -1030,6 +1044,8 @@ void IN_Init( void ) Cvar_SetValue( "com_unfocused", !( appState & SDL_APPINPUTFOCUS ) ); Cvar_SetValue( "com_minimized", !( appState & SDL_APPACTIVE ) ); + IN_InitKeyLockStates( ); + IN_InitJoystick( ); Com_DPrintf( "------------------------------------\n" ); }