aboutsummaryrefslogtreecommitdiffstats
path: root/code
diff options
context:
space:
mode:
Diffstat (limited to 'code')
-rw-r--r--code/null/null_input.c3
-rw-r--r--code/sdl/sdl_glimp.c5
-rw-r--r--code/sdl/sdl_input.c65
-rw-r--r--code/sys/sys_local.h1
-rw-r--r--code/sys/sys_main.c3
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( );
}
/*