Index: src/video/wincommon/SDL_sysevents.c =================================================================== --- src/video/wincommon/SDL_sysevents.c (revision 5318) +++ src/video/wincommon/SDL_sysevents.c (working copy) @@ -372,8 +372,7 @@ case WM_MOUSEMOVE: { #ifdef WM_MOUSELEAVE - /* No need to handle SDL_APPMOUSEFOCUS when fullscreen */ - if ( SDL_VideoSurface && !FULLSCREEN() ) { + if ( SDL_VideoSurface ) { /* mouse has entered the window */ if ( !(SDL_GetAppState() & SDL_APPMOUSEFOCUS) ) { @@ -398,11 +397,8 @@ #ifdef WM_MOUSELEAVE case WM_MOUSELEAVE: { - /* No need to handle SDL_APPMOUSEFOCUS when fullscreen */ - if ( SDL_VideoSurface && !FULLSCREEN() ) { + if ( SDL_VideoSurface ) { /* mouse has left the window */ - /* or */ - /* Elvis has left the building! */ posted = SDL_PrivateAppActive(0, SDL_APPMOUSEFOCUS); } } Index: src/video/windx5/SDL_dx5events.c =================================================================== --- src/video/windx5/SDL_dx5events.c (revision 5318) +++ src/video/windx5/SDL_dx5events.c (working copy) @@ -149,8 +149,8 @@ #else &c_dfDIMouse, #endif - (DISCL_FOREGROUND|DISCL_NONEXCLUSIVE), - (DISCL_FOREGROUND|DISCL_NONEXCLUSIVE), handle_mouse }, + (DISCL_BACKGROUND|DISCL_NONEXCLUSIVE), + (DISCL_BACKGROUND|DISCL_NONEXCLUSIVE), handle_mouse }, { NULL, NULL, NULL, 0, 0, NULL } }; @@ -297,8 +297,7 @@ { extern int mouse_relative; - if ( (SDL_GetAppState() & (SDL_APPINPUTFOCUS|SDL_APPMOUSEFOCUS)) == - (SDL_APPINPUTFOCUS|SDL_APPMOUSEFOCUS) ) { + if ( SDL_GetAppState() & SDL_APPMOUSEFOCUS ) { posted = SDL_PrivateMouseMotion( 0, relative, x, y); @@ -355,10 +354,6 @@ ClientToScreen(SDL_Window, ¢er); SetCursorPos(center.x, center.y); } - } else { - /* No window or mouse focus, control is lost */ - mouse_lost = 1; - ClipCursor(NULL); } } @@ -375,6 +370,12 @@ return; } + /* If mouse focus has been lost, make sure we release the cursor. */ + if ( !(SDL_GetAppState() & SDL_APPMOUSEFOCUS) ) { + mouse_lost = 1; + ClipCursor(NULL); + } + /* If the mouse was lost, regain some sense of mouse state */ if ( mouse_lost && (SDL_GetAppState() & SDL_APPMOUSEFOCUS) ) { POINT mouse_pos; @@ -667,7 +668,7 @@ } /* Pump the DirectInput flow */ - if ( SDL_GetAppState() & SDL_APPINPUTFOCUS ) { + if ( SDL_GetAppState() & SDL_APPMOUSEFOCUS ) { for ( i=0; i