From 4439a6ea9b3d605bb933553a677ce271de387ac5 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 8 May 2006 06:54:20 +0000 Subject: [PATCH] Disable the screensaver in DGA mode, which is even more important than X11... --- src/video/dga/SDL_dgavideo.c | 13 ++++++++++++- src/video/dga/SDL_dgavideo.h | 12 ++++++++++++ src/video/x11/SDL_x11events.c | 34 ++++++++++++++++----------------- src/video/x11/SDL_x11events_c.h | 6 +++--- src/video/x11/SDL_x11video.c | 6 +++--- 5 files changed, 47 insertions(+), 24 deletions(-) diff --git a/src/video/dga/SDL_dgavideo.c b/src/video/dga/SDL_dgavideo.c index ff7819042..7d8f45951 100644 --- a/src/video/dga/SDL_dgavideo.c +++ b/src/video/dga/SDL_dgavideo.c @@ -41,6 +41,11 @@ /* get function pointers... */ #include "../x11/SDL_x11dyn.h" +/* Heheh we're using X11 event code */ +extern void X11_SaveScreenSaver(Display *display, int *saved_timeout, BOOL *dpms); +extern void X11_DisableScreenSaver(Display *display); +extern void X11_RestoreScreenSaver(Display *display, int saved_timeout, BOOL dpms); + /* Initialization/Query functions */ static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat); static SDL_Rect **DGA_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags); @@ -387,6 +392,10 @@ static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat) return(-1); } + /* Save DPMS and screensaver settings */ + X11_SaveScreenSaver(DGA_Display, &screensaver_timeout, &dpms_enabled); + X11_DisableScreenSaver(DGA_Display); + /* Query for the list of available video modes */ modes = SDL_NAME(XDGAQueryModes)(DGA_Display, DGA_Screen, &num_modes); SDL_qsort(modes, num_modes, sizeof *modes, cmpmodes); @@ -1048,7 +1057,6 @@ void DGA_VideoQuit(_THIS) } #endif /* LOCK_DGA_DISPLAY */ - /* Clean up defined video modes */ for ( i=0; i +#endif + /* Hidden "this" pointer for the video functions */ #define _THIS SDL_VideoDevice *this @@ -86,6 +90,12 @@ struct SDL_PrivateVideoData { #ifdef LOCK_DGA_DISPLAY SDL_mutex *event_lock; #endif + + /* Screensaver settings */ + int screensaver_timeout; +#if SDL_VIDEO_DRIVER_X11_DPMS + BOOL dpms_enabled; +#endif }; /* Old variable names */ #define DGA_Display (this->hidden->DGA_Display) @@ -107,5 +117,7 @@ struct SDL_PrivateVideoData { #define hw_lock (this->hidden->hw_lock) #define DGA_event_base (this->hidden->event_base) #define event_lock (this->hidden->event_lock) +#define screensaver_timeout (this->hidden->screensaver_timeout) +#define dpms_enabled (this->hidden->dpms_enabled) #endif /* _SDL_dgavideo_h */ diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c index 0ad6eabad..2680a7e27 100644 --- a/src/video/x11/SDL_x11events.c +++ b/src/video/x11/SDL_x11events.c @@ -1118,53 +1118,53 @@ void X11_InitOSKeymap(_THIS) X11_InitKeymap(); } -void X11_SaveScreenSaver(_THIS) +void X11_SaveScreenSaver(Display *display, int *saved_timeout, BOOL *dpms) { int timeout, interval, prefer_blank, allow_exp; - XGetScreenSaver(SDL_Display, &timeout, &interval, &prefer_blank, &allow_exp); - screensaver_timeout = timeout; + XGetScreenSaver(display, &timeout, &interval, &prefer_blank, &allow_exp); + *saved_timeout = timeout; #if SDL_VIDEO_DRIVER_X11_DPMS if ( SDL_X11_HAVE_DPMS ) { int dummy; - if ( DPMSQueryExtension(SDL_Display, &dummy, &dummy) ) { + if ( DPMSQueryExtension(display, &dummy, &dummy) ) { CARD16 state; - DPMSInfo(SDL_Display, &state, &dpms_enabled); + DPMSInfo(display, &state, dpms); } } #endif /* SDL_VIDEO_DRIVER_X11_DPMS */ } -void X11_DisableScreenSaver(_THIS) +void X11_DisableScreenSaver(Display *display) { int timeout, interval, prefer_blank, allow_exp; - XGetScreenSaver(SDL_Display, &timeout, &interval, &prefer_blank, &allow_exp); + XGetScreenSaver(display, &timeout, &interval, &prefer_blank, &allow_exp); timeout = 0; - XSetScreenSaver(SDL_Display, timeout, interval, prefer_blank, allow_exp); + XSetScreenSaver(display, timeout, interval, prefer_blank, allow_exp); #if SDL_VIDEO_DRIVER_X11_DPMS if ( SDL_X11_HAVE_DPMS ) { int dummy; - if ( DPMSQueryExtension(SDL_Display, &dummy, &dummy) ) { - DPMSDisable(SDL_Display); + if ( DPMSQueryExtension(display, &dummy, &dummy) ) { + DPMSDisable(display); } } #endif /* SDL_VIDEO_DRIVER_X11_DPMS */ } -void X11_RestoreScreenSaver(_THIS) +void X11_RestoreScreenSaver(Display *display, int saved_timeout, BOOL dpms) { int timeout, interval, prefer_blank, allow_exp; - XGetScreenSaver(SDL_Display, &timeout, &interval, &prefer_blank, &allow_exp); - timeout = screensaver_timeout; - XSetScreenSaver(SDL_Display, timeout, interval, prefer_blank, allow_exp); + XGetScreenSaver(display, &timeout, &interval, &prefer_blank, &allow_exp); + timeout = saved_timeout; + XSetScreenSaver(display, timeout, interval, prefer_blank, allow_exp); #if SDL_VIDEO_DRIVER_X11_DPMS if ( SDL_X11_HAVE_DPMS ) { int dummy; - if ( DPMSQueryExtension(SDL_Display, &dummy, &dummy) ) { - if ( dpms_enabled ) { - DPMSEnable(SDL_Display); + if ( DPMSQueryExtension(display, &dummy, &dummy) ) { + if ( dpms ) { + DPMSEnable(display); } } } diff --git a/src/video/x11/SDL_x11events_c.h b/src/video/x11/SDL_x11events_c.h index b8326e453..567adb46d 100644 --- a/src/video/x11/SDL_x11events_c.h +++ b/src/video/x11/SDL_x11events_c.h @@ -28,6 +28,6 @@ extern void X11_InitOSKeymap(_THIS); extern void X11_PumpEvents(_THIS); extern void X11_SetKeyboardState(Display *display, const char *key_vec); -extern void X11_SaveScreenSaver(_THIS); -extern void X11_DisableScreenSaver(_THIS); -extern void X11_RestoreScreenSaver(_THIS); +extern void X11_SaveScreenSaver(Display *display, int *saved_timeout, BOOL *dpms); +extern void X11_DisableScreenSaver(Display *display); +extern void X11_RestoreScreenSaver(Display *display, int saved_timeout, BOOL dpms); diff --git a/src/video/x11/SDL_x11video.c b/src/video/x11/SDL_x11video.c index c1f1d5736..b295a3adf 100644 --- a/src/video/x11/SDL_x11video.c +++ b/src/video/x11/SDL_x11video.c @@ -545,8 +545,8 @@ static int X11_VideoInit(_THIS, SDL_PixelFormat *vformat) X11_SaveVidModeGamma(this); /* Save DPMS and screensaver settings */ - X11_SaveScreenSaver(this); - X11_DisableScreenSaver(this); + X11_SaveScreenSaver(SDL_Display, &screensaver_timeout, &dpms_enabled); + X11_DisableScreenSaver(SDL_Display); /* See if we have been passed a window to use */ SDL_windowid = SDL_getenv("SDL_WINDOWID"); @@ -1375,7 +1375,7 @@ void X11_VideoQuit(_THIS) } /* Restore DPMS and screensaver settings */ - X11_RestoreScreenSaver(this); + X11_RestoreScreenSaver(SDL_Display, screensaver_timeout, dpms_enabled); /* Free that blank cursor */ if ( SDL_BlankCursor != NULL ) {