Index: src/video/windib/SDL_dibevents.c =================================================================== --- src/video/windib/SDL_dibevents.c (revision 3072) +++ src/video/windib/SDL_dibevents.c (working copy) @@ -225,9 +225,14 @@ #if defined(SC_SCREENSAVE) && defined(SC_MONITORPOWER) case WM_SYSCOMMAND: { - if ((wParam&0xFFF0)==SC_SCREENSAVE || - (wParam&0xFFF0)==SC_MONITORPOWER) + const DWORD val = (DWORD) (wParam & 0xFFF0); + if ((val == SC_SCREENSAVE) || (val == SC_MONITORPOWER)) { + if (!this->hidden->allow_screensaver) { + /* Note that this doesn't stop anything on Vista + if the screensaver has a password. */ return(0); + } + } } /* Fall through to default processing */ #endif /* SC_SCREENSAVE && SC_MONITORPOWER */ Index: src/video/windib/SDL_dibvideo.c =================================================================== --- src/video/windib/SDL_dibvideo.c (revision 3072) +++ src/video/windib/SDL_dibvideo.c (working copy) @@ -282,6 +282,7 @@ int DIB_VideoInit(_THIS, SDL_PixelFormat *vformat) { + const char *env = NULL; #ifndef NO_CHANGEDISPLAYSETTINGS int i; DEVMODE settings; @@ -380,6 +381,10 @@ this->hidden->origRotation = -1; #endif + /* Allow environment override of screensaver disable. */ + env = SDL_getenv("SDL_VIDEO_ALLOW_SCREENSAVER"); + this->hidden->allow_screensaver = ( (env && SDL_atoi(env)) ? 1 : 0 ); + /* We're done! */ return(0); } Index: src/video/windib/SDL_dibvideo.h =================================================================== --- src/video/windib/SDL_dibvideo.h (revision 3072) +++ src/video/windib/SDL_dibvideo.h (working copy) @@ -41,6 +41,8 @@ HBITMAP screen_bmp; HPALETTE screen_pal; + int allow_screensaver; + #define NUM_MODELISTS 4 /* 8, 16, 24, and 32 bits-per-pixel */ int SDL_nummodes[NUM_MODELISTS]; SDL_Rect **SDL_modelist[NUM_MODELISTS];