diff options
author | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2008-08-22 22:16:37 +0000 |
---|---|---|
committer | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2008-08-22 22:16:37 +0000 |
commit | 6e6bab9af628a899fca58dffc42c2ebb09eceb69 (patch) | |
tree | d747b218e1f979cabe2341fef85324d4624b65ea /code/sdl/sdl_input.c | |
parent | f7b8641a76bdf60a9ebadcae5c7b67fd3a3401b8 (diff) | |
download | ioquake3-aero-6e6bab9af628a899fca58dffc42c2ebb09eceb69.tar.gz ioquake3-aero-6e6bab9af628a899fca58dffc42c2ebb09eceb69.zip |
* Don't set SE_KEY event to ctrl-h; I don't think this makes sense
* Don't warp the mouse on deactivation unless the cursor is in the window
already; this fixes in_nograb
* Stop grabbing the mouse in windowed mode when there is no sense in
doing so
* Make sure that IN_Restart is only called on r_fullscreen modification
if a mode change actually takes place
git-svn-id: svn://svn.icculus.org/quake3/trunk@1455 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'code/sdl/sdl_input.c')
-rw-r--r-- | code/sdl/sdl_input.c | 62 |
1 files changed, 39 insertions, 23 deletions
diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index de82d5d..358c16b 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -58,9 +58,9 @@ static qboolean mouseAvailable = qfalse; static qboolean mouseActive = qfalse; static qboolean keyRepeatEnabled = qfalse; -static cvar_t *in_mouse; +static cvar_t *in_mouse = NULL; #ifdef MACOS_X_ACCELERATION_HACK -static cvar_t *in_disablemacosxmouseaccel; +static cvar_t *in_disablemacosxmouseaccel = NULL; static double originalMouseSpeed = -1.0; #endif static cvar_t *in_nograb; @@ -231,8 +231,7 @@ static const char *IN_TranslateSDLToQ3Key( SDL_keysym *keysym, if( *key != K_DEL ) { // ctrl-h - *key = CTRL('h'); - *buf = *key; + *buf = CTRL('h'); break; } // fallthrough @@ -393,7 +392,10 @@ static void IN_DeactivateMouse( void ) if( mouseActive ) { SDL_WM_GrabInput( SDL_GRAB_OFF ); - SDL_WarpMouse( glConfig.vidWidth / 2, glConfig.vidHeight / 2 ); + + // Don't warp the mouse unless the cursor is within the window + if( SDL_GetAppState( ) & SDL_APPMOUSEFOCUS ) + SDL_WarpMouse( glConfig.vidWidth / 2, glConfig.vidHeight / 2 ); mouseActive = qfalse; } @@ -782,19 +784,33 @@ static void IN_ProcessEvents( void ) IN_Frame =============== */ -void IN_Frame (void) +void IN_Frame( void ) { + qboolean loading; + IN_JoyMove( ); + IN_ProcessEvents( ); + + // If not DISCONNECTED (main menu) or ACTIVE (in game), we're loading + loading = !!( cls.state != CA_DISCONNECTED && cls.state != CA_ACTIVE ); - // Release the mouse if the console is down in windowed mode - // or if the window loses focus due to task switching - if( ( ( Key_GetCatcher( ) & KEYCATCH_CONSOLE ) && !r_fullscreen->integer ) || - !( SDL_GetAppState() & SDL_APPINPUTFOCUS ) ) + if( !r_fullscreen->integer && ( Key_GetCatcher( ) & KEYCATCH_CONSOLE ) ) + { + // Console is down in windowed mode + IN_DeactivateMouse( ); + } + else if( !r_fullscreen->integer && loading ) + { + // Loading in windowed mode + IN_DeactivateMouse( ); + } + else if( !( SDL_GetAppState() & SDL_APPINPUTFOCUS ) ) + { + // Window not got focus IN_DeactivateMouse( ); + } else IN_ActivateMouse( ); - - IN_ProcessEvents( ); } /* @@ -802,7 +818,7 @@ void IN_Frame (void) IN_Init =============== */ -void IN_Init(void) +void IN_Init( void ) { if( !SDL_WasInit( SDL_INIT_VIDEO ) ) { @@ -810,24 +826,24 @@ void IN_Init(void) return; } - Com_DPrintf ("\n------- Input Initialization -------\n"); + Com_DPrintf( "\n------- Input Initialization -------\n" ); in_keyboardDebug = Cvar_Get( "in_keyboardDebug", "0", CVAR_ARCHIVE ); // mouse variables - in_mouse = Cvar_Get ("in_mouse", "1", CVAR_ARCHIVE); - in_nograb = Cvar_Get ("in_nograb", "0", CVAR_ARCHIVE); + in_mouse = Cvar_Get( "in_mouse", "1", CVAR_ARCHIVE ); + in_nograb = Cvar_Get( "in_nograb", "0", CVAR_ARCHIVE ); - in_joystick = Cvar_Get ("in_joystick", "0", CVAR_ARCHIVE|CVAR_LATCH); - in_joystickDebug = Cvar_Get ("in_joystickDebug", "0", CVAR_TEMP); - in_joystickThreshold = Cvar_Get ("in_joystickThreshold", "0.15", CVAR_ARCHIVE); + in_joystick = Cvar_Get( "in_joystick", "0", CVAR_ARCHIVE|CVAR_LATCH ); + in_joystickDebug = Cvar_Get( "in_joystickDebug", "0", CVAR_TEMP ); + in_joystickThreshold = Cvar_Get( "in_joystickThreshold", "0.15", CVAR_ARCHIVE ); #ifdef MACOS_X_ACCELERATION_HACK - in_disablemacosxmouseaccel = Cvar_Get ("in_disablemacosxmouseaccel", "1", CVAR_ARCHIVE); + in_disablemacosxmouseaccel = Cvar_Get( "in_disablemacosxmouseaccel", "1", CVAR_ARCHIVE ); #endif - SDL_EnableUNICODE(1); - SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); + SDL_EnableUNICODE( 1 ); + SDL_EnableKeyRepeat( SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL ); keyRepeatEnabled = qtrue; if( in_mouse->value ) @@ -842,7 +858,7 @@ void IN_Init(void) } IN_InitJoystick( ); - Com_DPrintf ("------------------------------------\n"); + Com_DPrintf( "------------------------------------\n" ); } /* |