* 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
This commit is contained in:
Tim Angus 2008-08-22 22:16:37 +00:00
parent e4e0568641
commit acbf982689
2 changed files with 53 additions and 36 deletions

View file

@ -725,18 +725,16 @@ void GLimp_EndFrame( void )
if( r_fullscreen->modified ) if( r_fullscreen->modified )
{ {
qboolean fullscreen; qboolean fullscreen;
qboolean needToToggle = qtrue;
qboolean sdlToggled = qfalse; qboolean sdlToggled = qfalse;
SDL_Surface *s = SDL_GetVideoSurface( ); SDL_Surface *s = SDL_GetVideoSurface( );
if( s ) if( s )
{ {
// Find out the current state // Find out the current state
if( s->flags & SDL_FULLSCREEN ) fullscreen = !!( s->flags & SDL_FULLSCREEN );
fullscreen = qtrue;
else
fullscreen = qfalse;
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.Printf( PRINT_ALL, "Fullscreen not allowed with in_nograb 1\n");
ri.Cvar_Set( "r_fullscreen", "0" ); ri.Cvar_Set( "r_fullscreen", "0" );
@ -744,17 +742,20 @@ void GLimp_EndFrame( void )
} }
// Is the state we want different from the current state? // 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 ); sdlToggled = SDL_WM_ToggleFullScreen( s );
else
sdlToggled = qtrue;
} }
if( needToToggle )
{
// SDL_WM_ToggleFullScreen didn't work, so do it the slow way // SDL_WM_ToggleFullScreen didn't work, so do it the slow way
if( !sdlToggled ) if( !sdlToggled )
Cbuf_AddText( "vid_restart" ); Cbuf_AddText( "vid_restart" );
IN_Restart( ); IN_Restart( );
}
r_fullscreen->modified = qfalse; r_fullscreen->modified = qfalse;
} }

View file

@ -58,9 +58,9 @@ static qboolean mouseAvailable = qfalse;
static qboolean mouseActive = qfalse; static qboolean mouseActive = qfalse;
static qboolean keyRepeatEnabled = qfalse; static qboolean keyRepeatEnabled = qfalse;
static cvar_t *in_mouse; static cvar_t *in_mouse = NULL;
#ifdef MACOS_X_ACCELERATION_HACK #ifdef MACOS_X_ACCELERATION_HACK
static cvar_t *in_disablemacosxmouseaccel; static cvar_t *in_disablemacosxmouseaccel = NULL;
static double originalMouseSpeed = -1.0; static double originalMouseSpeed = -1.0;
#endif #endif
static cvar_t *in_nograb; static cvar_t *in_nograb;
@ -231,8 +231,7 @@ static const char *IN_TranslateSDLToQ3Key( SDL_keysym *keysym,
if( *key != K_DEL ) if( *key != K_DEL )
{ {
// ctrl-h // ctrl-h
*key = CTRL('h'); *buf = CTRL('h');
*buf = *key;
break; break;
} }
// fallthrough // fallthrough
@ -393,6 +392,9 @@ static void IN_DeactivateMouse( void )
if( mouseActive ) if( mouseActive )
{ {
SDL_WM_GrabInput( SDL_GRAB_OFF ); SDL_WM_GrabInput( SDL_GRAB_OFF );
// 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 ); SDL_WarpMouse( glConfig.vidWidth / 2, glConfig.vidHeight / 2 );
mouseActive = qfalse; mouseActive = qfalse;
@ -782,19 +784,33 @@ static void IN_ProcessEvents( void )
IN_Frame IN_Frame
=============== ===============
*/ */
void IN_Frame (void) void IN_Frame( void )
{ {
IN_JoyMove( ); qboolean loading;
// Release the mouse if the console is down in windowed mode IN_JoyMove( );
// or if the window loses focus due to task switching IN_ProcessEvents( );
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( ); 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 else
IN_ActivateMouse( ); IN_ActivateMouse( );
IN_ProcessEvents( );
} }
/* /*
@ -802,7 +818,7 @@ void IN_Frame (void)
IN_Init IN_Init
=============== ===============
*/ */
void IN_Init(void) void IN_Init( void )
{ {
if( !SDL_WasInit( SDL_INIT_VIDEO ) ) if( !SDL_WasInit( SDL_INIT_VIDEO ) )
{ {
@ -810,24 +826,24 @@ void IN_Init(void)
return; return;
} }
Com_DPrintf ("\n------- Input Initialization -------\n"); Com_DPrintf( "\n------- Input Initialization -------\n" );
in_keyboardDebug = Cvar_Get( "in_keyboardDebug", "0", CVAR_ARCHIVE ); in_keyboardDebug = Cvar_Get( "in_keyboardDebug", "0", CVAR_ARCHIVE );
// mouse variables // mouse variables
in_mouse = Cvar_Get ("in_mouse", "1", CVAR_ARCHIVE); in_mouse = Cvar_Get( "in_mouse", "1", CVAR_ARCHIVE );
in_nograb = Cvar_Get ("in_nograb", "0", CVAR_ARCHIVE); in_nograb = Cvar_Get( "in_nograb", "0", CVAR_ARCHIVE );
in_joystick = Cvar_Get ("in_joystick", "0", CVAR_ARCHIVE|CVAR_LATCH); in_joystick = Cvar_Get( "in_joystick", "0", CVAR_ARCHIVE|CVAR_LATCH );
in_joystickDebug = Cvar_Get ("in_joystickDebug", "0", CVAR_TEMP); in_joystickDebug = Cvar_Get( "in_joystickDebug", "0", CVAR_TEMP );
in_joystickThreshold = Cvar_Get ("in_joystickThreshold", "0.15", CVAR_ARCHIVE); in_joystickThreshold = Cvar_Get( "in_joystickThreshold", "0.15", CVAR_ARCHIVE );
#ifdef MACOS_X_ACCELERATION_HACK #ifdef MACOS_X_ACCELERATION_HACK
in_disablemacosxmouseaccel = Cvar_Get ("in_disablemacosxmouseaccel", "1", CVAR_ARCHIVE); in_disablemacosxmouseaccel = Cvar_Get( "in_disablemacosxmouseaccel", "1", CVAR_ARCHIVE );
#endif #endif
SDL_EnableUNICODE(1); SDL_EnableUNICODE( 1 );
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); SDL_EnableKeyRepeat( SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL );
keyRepeatEnabled = qtrue; keyRepeatEnabled = qtrue;
if( in_mouse->value ) if( in_mouse->value )
@ -842,7 +858,7 @@ void IN_Init(void)
} }
IN_InitJoystick( ); IN_InitJoystick( );
Com_DPrintf ("------------------------------------\n"); Com_DPrintf( "------------------------------------\n" );
} }
/* /*