From 37d631212417d0e40f71fcad2c2a1df907165aa0 Mon Sep 17 00:00:00 2001 From: tma Date: Sat, 5 Jul 2008 23:50:38 +0000 Subject: * (bug 3610) Server sending unnecessary newline with SV_ConSay_F (Tyler Schwend ) * (bug 3623) COMMAND is mapped to the ALT key (Matthias ) * (bug 3665) Typo error in FS_FOpenFileByMode function (TsT ) * (bug 3669) Some files left out of Solaris Packages (Vincent Cojot ) * (bug 3680) server quit messages (Ben Millwood) * (bug 3682) Maps with >1024 models cause a segfault (misantropia ) * (bug 3683) R_FindShader(): negative lightmap indexes cause stray pointers (misantropia ) * (bug 3688) q3asm potential segfault fix and other changes (TsT ) * (bug 3695) Not allowing to write file with lib extention (.dll/.so/...) (TsT ) * (bug 3696) make-macosx-ub.sh outdated by revision 1340; test for Tiger not working (Matthias ) * (bug 3698) #error reported as warning in q3cpp (and no #warning support) (Ben Millwood) * (bug 3703) restoring the valued pre-SDL window behaviour (/dev/humancontroller ) git-svn-id: svn://svn.icculus.org/quake3/trunk@1405 edf5b092-35ff-0310-97b2-ce42778d08ea --- code/sdl/sdl_input.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'code/sdl') diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index f3f8ccc..93e60e6 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -136,7 +136,8 @@ static const char *IN_TranslateSDLToQ3Key(SDL_keysym *keysym, int *key) case SDLK_RCTRL: *key = K_CTRL; break; case SDLK_RMETA: - case SDLK_LMETA: + case SDLK_LMETA: *key = K_COMMAND; break; + case SDLK_RALT: case SDLK_LALT: *key = K_ALT; break; @@ -288,18 +289,17 @@ static void IN_ActivateMouse( void ) if( !mouseActive ) { - SDL_WM_GrabInput( SDL_GRAB_ON ); SDL_ShowCursor( 0 ); - #ifdef MACOS_X_CURSOR_HACK // This is a bug in the current SDL/macosx...have to toggle it a few // times to get the cursor to hide. SDL_ShowCursor( 1 ); SDL_ShowCursor( 0 ); #endif + SDL_WM_GrabInput( SDL_GRAB_ON ); } - // in_nograb makes no sense unless fullscreen + // in_nograb makes no sense in fullscreen mode if( !r_fullscreen->integer ) { if( in_nograb->modified || !mouseActive ) @@ -347,8 +347,9 @@ static void IN_DeactivateMouse( void ) if( mouseActive ) { - SDL_ShowCursor( 1 ); SDL_WM_GrabInput( SDL_GRAB_OFF ); + SDL_WarpMouse( glConfig.vidWidth >> 1, glConfig.vidHeight >> 1 ); + SDL_ShowCursor( 1 ); mouseActive = qfalse; } @@ -719,6 +720,15 @@ static void IN_ProcessEvents( void ) } break; + case SDL_ACTIVEEVENT: + if( e.active.state == SDL_APPINPUTFOCUS ) { + if( e.active.gain ) + IN_ActivateMouse(); + else + IN_DeactivateMouse(); + } + break; + case SDL_QUIT: Sys_Quit(); break; @@ -741,8 +751,10 @@ void IN_Frame (void) { IN_JoyMove( ); - // Release the mouse if the console if down and we're windowed - if( ( Key_GetCatcher( ) & KEYCATCH_CONSOLE ) && !r_fullscreen->integer ) + // 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 ) ) IN_DeactivateMouse( ); else IN_ActivateMouse( ); -- cgit v1.2.3