Commit 52c114a3 authored by Sam Lantinga's avatar Sam Lantinga

Disable the screensaver in DGA mode, which is even more important than X11...

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%401743
parent 9cdedc64
...@@ -41,6 +41,11 @@ ...@@ -41,6 +41,11 @@
/* get function pointers... */ /* get function pointers... */
#include "../x11/SDL_x11dyn.h" #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 */ /* Initialization/Query functions */
static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat); static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat);
static SDL_Rect **DGA_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags); static SDL_Rect **DGA_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags);
...@@ -387,6 +392,10 @@ static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat) ...@@ -387,6 +392,10 @@ static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat)
return(-1); 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 */ /* Query for the list of available video modes */
modes = SDL_NAME(XDGAQueryModes)(DGA_Display, DGA_Screen, &num_modes); modes = SDL_NAME(XDGAQueryModes)(DGA_Display, DGA_Screen, &num_modes);
SDL_qsort(modes, num_modes, sizeof *modes, cmpmodes); SDL_qsort(modes, num_modes, sizeof *modes, cmpmodes);
...@@ -1048,7 +1057,6 @@ void DGA_VideoQuit(_THIS) ...@@ -1048,7 +1057,6 @@ void DGA_VideoQuit(_THIS)
} }
#endif /* LOCK_DGA_DISPLAY */ #endif /* LOCK_DGA_DISPLAY */
/* Clean up defined video modes */ /* Clean up defined video modes */
for ( i=0; i<NUM_MODELISTS; ++i ) { for ( i=0; i<NUM_MODELISTS; ++i ) {
if ( SDL_modelist[i] != NULL ) { if ( SDL_modelist[i] != NULL ) {
...@@ -1063,6 +1071,9 @@ void DGA_VideoQuit(_THIS) ...@@ -1063,6 +1071,9 @@ void DGA_VideoQuit(_THIS)
/* Clean up the memory bucket list */ /* Clean up the memory bucket list */
DGA_FreeHWSurfaces(this); DGA_FreeHWSurfaces(this);
/* Restore DPMS and screensaver settings */
X11_RestoreScreenSaver(DGA_Display, screensaver_timeout, dpms_enabled);
/* Close up the display */ /* Close up the display */
XCloseDisplay(DGA_Display); XCloseDisplay(DGA_Display);
} }
......
...@@ -30,6 +30,10 @@ ...@@ -30,6 +30,10 @@
#include "SDL_mutex.h" #include "SDL_mutex.h"
#include "../SDL_sysvideo.h" #include "../SDL_sysvideo.h"
#if SDL_VIDEO_DRIVER_X11_DPMS
#include <X11/extensions/dpms.h>
#endif
/* Hidden "this" pointer for the video functions */ /* Hidden "this" pointer for the video functions */
#define _THIS SDL_VideoDevice *this #define _THIS SDL_VideoDevice *this
...@@ -86,6 +90,12 @@ struct SDL_PrivateVideoData { ...@@ -86,6 +90,12 @@ struct SDL_PrivateVideoData {
#ifdef LOCK_DGA_DISPLAY #ifdef LOCK_DGA_DISPLAY
SDL_mutex *event_lock; SDL_mutex *event_lock;
#endif #endif
/* Screensaver settings */
int screensaver_timeout;
#if SDL_VIDEO_DRIVER_X11_DPMS
BOOL dpms_enabled;
#endif
}; };
/* Old variable names */ /* Old variable names */
#define DGA_Display (this->hidden->DGA_Display) #define DGA_Display (this->hidden->DGA_Display)
...@@ -107,5 +117,7 @@ struct SDL_PrivateVideoData { ...@@ -107,5 +117,7 @@ struct SDL_PrivateVideoData {
#define hw_lock (this->hidden->hw_lock) #define hw_lock (this->hidden->hw_lock)
#define DGA_event_base (this->hidden->event_base) #define DGA_event_base (this->hidden->event_base)
#define event_lock (this->hidden->event_lock) #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 */ #endif /* _SDL_dgavideo_h */
...@@ -1118,53 +1118,53 @@ void X11_InitOSKeymap(_THIS) ...@@ -1118,53 +1118,53 @@ void X11_InitOSKeymap(_THIS)
X11_InitKeymap(); X11_InitKeymap();
} }
void X11_SaveScreenSaver(_THIS) void X11_SaveScreenSaver(Display *display, int *saved_timeout, BOOL *dpms)
{ {
int timeout, interval, prefer_blank, allow_exp; int timeout, interval, prefer_blank, allow_exp;
XGetScreenSaver(SDL_Display, &timeout, &interval, &prefer_blank, &allow_exp); XGetScreenSaver(display, &timeout, &interval, &prefer_blank, &allow_exp);
screensaver_timeout = timeout; *saved_timeout = timeout;
#if SDL_VIDEO_DRIVER_X11_DPMS #if SDL_VIDEO_DRIVER_X11_DPMS
if ( SDL_X11_HAVE_DPMS ) { if ( SDL_X11_HAVE_DPMS ) {
int dummy; int dummy;
if ( DPMSQueryExtension(SDL_Display, &dummy, &dummy) ) { if ( DPMSQueryExtension(display, &dummy, &dummy) ) {
CARD16 state; CARD16 state;
DPMSInfo(SDL_Display, &state, &dpms_enabled); DPMSInfo(display, &state, dpms);
} }
} }
#endif /* SDL_VIDEO_DRIVER_X11_DPMS */ #endif /* SDL_VIDEO_DRIVER_X11_DPMS */
} }
void X11_DisableScreenSaver(_THIS) void X11_DisableScreenSaver(Display *display)
{ {
int timeout, interval, prefer_blank, allow_exp; 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; 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_VIDEO_DRIVER_X11_DPMS
if ( SDL_X11_HAVE_DPMS ) { if ( SDL_X11_HAVE_DPMS ) {
int dummy; int dummy;
if ( DPMSQueryExtension(SDL_Display, &dummy, &dummy) ) { if ( DPMSQueryExtension(display, &dummy, &dummy) ) {
DPMSDisable(SDL_Display); DPMSDisable(display);
} }
} }
#endif /* SDL_VIDEO_DRIVER_X11_DPMS */ #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; 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 = screensaver_timeout; timeout = saved_timeout;
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_VIDEO_DRIVER_X11_DPMS
if ( SDL_X11_HAVE_DPMS ) { if ( SDL_X11_HAVE_DPMS ) {
int dummy; int dummy;
if ( DPMSQueryExtension(SDL_Display, &dummy, &dummy) ) { if ( DPMSQueryExtension(display, &dummy, &dummy) ) {
if ( dpms_enabled ) { if ( dpms ) {
DPMSEnable(SDL_Display); DPMSEnable(display);
} }
} }
} }
......
...@@ -28,6 +28,6 @@ extern void X11_InitOSKeymap(_THIS); ...@@ -28,6 +28,6 @@ extern void X11_InitOSKeymap(_THIS);
extern void X11_PumpEvents(_THIS); extern void X11_PumpEvents(_THIS);
extern void X11_SetKeyboardState(Display *display, const char *key_vec); extern void X11_SetKeyboardState(Display *display, const char *key_vec);
extern void X11_SaveScreenSaver(_THIS); extern void X11_SaveScreenSaver(Display *display, int *saved_timeout, BOOL *dpms);
extern void X11_DisableScreenSaver(_THIS); extern void X11_DisableScreenSaver(Display *display);
extern void X11_RestoreScreenSaver(_THIS); extern void X11_RestoreScreenSaver(Display *display, int saved_timeout, BOOL dpms);
...@@ -545,8 +545,8 @@ static int X11_VideoInit(_THIS, SDL_PixelFormat *vformat) ...@@ -545,8 +545,8 @@ static int X11_VideoInit(_THIS, SDL_PixelFormat *vformat)
X11_SaveVidModeGamma(this); X11_SaveVidModeGamma(this);
/* Save DPMS and screensaver settings */ /* Save DPMS and screensaver settings */
X11_SaveScreenSaver(this); X11_SaveScreenSaver(SDL_Display, &screensaver_timeout, &dpms_enabled);
X11_DisableScreenSaver(this); X11_DisableScreenSaver(SDL_Display);
/* See if we have been passed a window to use */ /* See if we have been passed a window to use */
SDL_windowid = SDL_getenv("SDL_WINDOWID"); SDL_windowid = SDL_getenv("SDL_WINDOWID");
...@@ -1375,7 +1375,7 @@ void X11_VideoQuit(_THIS) ...@@ -1375,7 +1375,7 @@ void X11_VideoQuit(_THIS)
} }
/* Restore DPMS and screensaver settings */ /* Restore DPMS and screensaver settings */
X11_RestoreScreenSaver(this); X11_RestoreScreenSaver(SDL_Display, screensaver_timeout, dpms_enabled);
/* Free that blank cursor */ /* Free that blank cursor */
if ( SDL_BlankCursor != NULL ) { if ( SDL_BlankCursor != NULL ) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment