r1455 - trunk/code/sdl

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Aug 22 18:16:44 EDT 2008


Author: tma
Date: 2008-08-22 18:16:37 -0400 (Fri, 22 Aug 2008)
New Revision: 1455

Modified:
   trunk/code/sdl/sdl_glimp.c
   trunk/code/sdl/sdl_input.c
Log:
* 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


Modified: trunk/code/sdl/sdl_glimp.c
===================================================================
--- trunk/code/sdl/sdl_glimp.c	2008-08-22 11:41:54 UTC (rev 1454)
+++ trunk/code/sdl/sdl_glimp.c	2008-08-22 22:16:37 UTC (rev 1455)
@@ -725,18 +725,16 @@
 	if( r_fullscreen->modified )
 	{
 		qboolean    fullscreen;
+		qboolean    needToToggle = qtrue;
 		qboolean    sdlToggled = qfalse;
 		SDL_Surface *s = SDL_GetVideoSurface( );
 
 		if( s )
 		{
 			// Find out the current state
-			if( s->flags & SDL_FULLSCREEN )
-				fullscreen = qtrue;
-			else
-				fullscreen = qfalse;
+			fullscreen = !!( s->flags & SDL_FULLSCREEN );
 				
-			if (r_fullscreen->integer && Cvar_VariableIntegerValue( "in_nograb" ))
+			if( r_fullscreen->integer && Cvar_VariableIntegerValue( "in_nograb" ) )
 			{
 				ri.Printf( PRINT_ALL, "Fullscreen not allowed with in_nograb 1\n");
 				ri.Cvar_Set( "r_fullscreen", "0" );
@@ -744,17 +742,20 @@
 			}
 
 			// Is the state we want different from the current state?
-			if( !!r_fullscreen->integer != fullscreen )
+			needToToggle = !!r_fullscreen->integer != fullscreen;
+
+			if( needToToggle )
 				sdlToggled = SDL_WM_ToggleFullScreen( s );
-			else
-				sdlToggled = qtrue;
 		}
 
-		// SDL_WM_ToggleFullScreen didn't work, so do it the slow way
-		if( !sdlToggled )
-			Cbuf_AddText( "vid_restart" );
+		if( needToToggle )
+		{
+			// SDL_WM_ToggleFullScreen didn't work, so do it the slow way
+			if( !sdlToggled )
+				Cbuf_AddText( "vid_restart" );
 
-		IN_Restart( );
+			IN_Restart( );
+		}
 
 		r_fullscreen->modified = qfalse;
 	}

Modified: trunk/code/sdl/sdl_input.c
===================================================================
--- trunk/code/sdl/sdl_input.c	2008-08-22 11:41:54 UTC (rev 1454)
+++ trunk/code/sdl/sdl_input.c	2008-08-22 22:16:37 UTC (rev 1455)
@@ -58,9 +58,9 @@
 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 @@
 				if( *key != K_DEL )
 				{
 					// ctrl-h
-					*key = CTRL('h');
-					*buf = *key;
+					*buf = CTRL('h');
 					break;
 				}
 				// fallthrough
@@ -393,8 +392,11 @@
 	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 @@
 IN_Frame
 ===============
 */
-void IN_Frame (void)
+void IN_Frame( void )
 {
+	qboolean loading;
+
 	IN_JoyMove( );
+	IN_ProcessEvents( );
 
-	// 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 not DISCONNECTED (main menu) or ACTIVE (in game), we're loading
+	loading = !!( cls.state != CA_DISCONNECTED && cls.state != CA_ACTIVE );
+
+	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 @@
 IN_Init
 ===============
 */
-void IN_Init(void)
+void IN_Init( void )
 {
 	if( !SDL_WasInit( SDL_INIT_VIDEO ) )
 	{
@@ -810,24 +826,24 @@
 		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 @@
 	}
 
 	IN_InitJoystick( );
-	Com_DPrintf ("------------------------------------\n");
+	Com_DPrintf( "------------------------------------\n" );
 }
 
 /*




More information about the quake3-commits mailing list