diff options
Diffstat (limited to 'code')
-rw-r--r-- | code/null/null_input.c | 3 | ||||
-rw-r--r-- | code/sdl/sdl_glimp.c | 5 | ||||
-rw-r--r-- | code/sdl/sdl_input.c | 65 | ||||
-rw-r--r-- | code/sys/sys_local.h | 1 | ||||
-rw-r--r-- | code/sys/sys_main.c | 3 |
5 files changed, 57 insertions, 20 deletions
diff --git a/code/null/null_input.c b/code/null/null_input.c index 4edb1cb..f0c89c4 100644 --- a/code/null/null_input.c +++ b/code/null/null_input.c @@ -30,6 +30,9 @@ void IN_Frame (void) { void IN_Shutdown( void ) { } +void IN_Restart( void ) { +} + void Sys_SendKeyEvents (void) { } diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c index 3135ebb..40c1e6d 100644 --- a/code/sdl/sdl_glimp.c +++ b/code/sdl/sdl_glimp.c @@ -78,6 +78,7 @@ typedef enum static SDL_Surface *screen = NULL; cvar_t *r_allowSoftwareGL; // Don't abort out if a hardware visual can't be obtained +cvar_t *r_sdlDriver; void (APIENTRYP qglActiveTextureARB) (GLenum texture); void (APIENTRYP qglClientActiveTextureARB) (GLenum texture); @@ -423,6 +424,7 @@ static qboolean GLimp_StartDriverAndSetMode( int mode, qboolean fullscreen ) SDL_VideoDriverName( driverName, sizeof( driverName ) - 1 ); ri.Printf( PRINT_ALL, "SDL using driver \"%s\"\n", driverName ); + Cvar_Set( "r_sdlDriver", driverName ); } if (fullscreen && Cvar_VariableIntegerValue( "in_nograb" ) ) @@ -642,6 +644,7 @@ void GLimp_Init( void ) qboolean success = qtrue; r_allowSoftwareGL = ri.Cvar_Get( "r_allowSoftwareGL", "0", CVAR_LATCH ); + r_sdlDriver = ri.Cvar_Get( "r_sdlDriver", "", CVAR_ROM ); Sys_GLimpInit( ); @@ -732,6 +735,8 @@ void GLimp_EndFrame( void ) if( !sdlToggled ) Cbuf_AddText( "vid_restart" ); + IN_Restart( ); + r_fullscreen->modified = qfalse; } } diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index 6287f8e..3fa093a 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -323,7 +323,15 @@ IN_DeactivateMouse */ static void IN_DeactivateMouse( void ) { - if (!mouseAvailable || !SDL_WasInit( SDL_INIT_VIDEO ) ) + if( !SDL_WasInit( SDL_INIT_VIDEO ) ) + return; + + // Always show the cursor when the mouse is disabled, + // but not when fullscreen + if( !r_fullscreen->integer ) + SDL_ShowCursor( 1 ); + + if( !mouseAvailable ) return; #ifdef MACOS_X_ACCELERATION_HACK @@ -349,7 +357,6 @@ static void IN_DeactivateMouse( void ) { SDL_WM_GrabInput( SDL_GRAB_OFF ); SDL_WarpMouse( glConfig.vidWidth / 2, glConfig.vidHeight / 2 ); - SDL_ShowCursor( 1 ); mouseActive = qfalse; } @@ -398,10 +405,10 @@ struct /* =============== -IN_StartupJoystick +IN_InitJoystick =============== */ -static void IN_StartupJoystick( void ) +static void IN_InitJoystick( void ) { int i = 0; int total = 0; @@ -452,8 +459,22 @@ static void IN_StartupJoystick( void ) Com_DPrintf( "Balls: %d\n", SDL_JoystickNumBalls(stick) ); SDL_JoystickEventState(SDL_QUERY); +} - return; +/* +=============== +IN_ShutdownJoystick +=============== +*/ +static void IN_ShutdownJoystick( void ) +{ + if (stick) + { + SDL_JoystickClose(stick); + stick = NULL; + } + + SDL_QuitSubSystem(SDL_INIT_JOYSTICK); } /* @@ -773,18 +794,22 @@ void IN_Init(void) in_disablemacosxmouseaccel = Cvar_Get ("in_disablemacosxmouseaccel", "1", CVAR_ARCHIVE); #endif - Cvar_Set( "cl_platformSensitivity", "1.0" ); - SDL_EnableUNICODE(1); SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); keyRepeatEnabled = qtrue; - if (in_mouse->value) + if( in_mouse->value ) + { mouseAvailable = qtrue; + IN_ActivateMouse( ); + } else + { + IN_DeactivateMouse( ); mouseAvailable = qfalse; + } - IN_StartupJoystick( ); + IN_InitJoystick( ); Com_DPrintf ("------------------------------------\n"); } @@ -793,17 +818,21 @@ void IN_Init(void) IN_Shutdown =============== */ -void IN_Shutdown(void) +void IN_Shutdown( void ) { - IN_DeactivateMouse(); - + IN_DeactivateMouse( ); mouseAvailable = qfalse; - if (stick) - { - SDL_JoystickClose(stick); - stick = NULL; - } + IN_ShutdownJoystick( ); +} - SDL_QuitSubSystem(SDL_INIT_JOYSTICK); +/* +=============== +IN_Restart +=============== +*/ +void IN_Restart( void ) +{ + IN_ShutdownJoystick( ); + IN_Init( ); } diff --git a/code/sys/sys_local.h b/code/sys/sys_local.h index 353d360..a114c79 100644 --- a/code/sys/sys_local.h +++ b/code/sys/sys_local.h @@ -32,6 +32,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA void IN_Init( void ); void IN_Frame( void ); void IN_Shutdown( void ); +void IN_Restart( void ); // Console void CON_Shutdown( void ); diff --git a/code/sys/sys_main.c b/code/sys/sys_main.c index 483d3f8..be9e2f0 100644 --- a/code/sys/sys_main.c +++ b/code/sys/sys_main.c @@ -112,8 +112,7 @@ Restart the input subsystem */ void Sys_In_Restart_f( void ) { - IN_Shutdown(); - IN_Init(); + IN_Restart( ); } /* |