Commit e56bbe3f71732e44af0d153376556bfc66ec9c1d

Sam Lantinga 2014-02-28T14:23:41

Added a hint to enable the screensaver by default

diff --git a/include/SDL_hints.h b/include/SDL_hints.h
index 2e80a6e..26edca5 100644
--- a/include/SDL_hints.h
+++ b/include/SDL_hints.h
@@ -129,6 +129,17 @@ extern "C" {
 #define SDL_HINT_RENDER_VSYNC               "SDL_RENDER_VSYNC"
 
 /**
+ *  \brief  A variable controlling whether the screensaver is enabled. 
+ *
+ *  This variable can be set to the following values:
+ *    "0"       - Disable screensaver
+ *    "1"       - Enable screensaver
+ *
+ *  By default SDL will disable the screensaver.
+ */
+#define SDL_HINT_VIDEO_ALLOW_SCREENSAVER    "SDL_VIDEO_ALLOW_SCREENSAVER"
+
+/**
  *  \brief  A variable controlling whether the X11 VidMode extension should be used.
  *
  *  This variable can be set to the following values:
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
index dcce082..87e8506 100644
--- a/src/video/SDL_video.c
+++ b/src/video/SDL_video.c
@@ -421,8 +421,10 @@ int
 SDL_VideoInit(const char *driver_name)
 {
     SDL_VideoDevice *video;
+    const char *hint;
     int index;
     int i;
+    SDL_bool allow_screensaver;
 
     /* Check to make sure we don't overwrite '_this' */
     if (_this != NULL) {
@@ -510,7 +512,15 @@ SDL_VideoInit(const char *driver_name)
        joystick, or passively watching a movie. Things that use SDL but
        function more like a normal desktop app should explicitly reenable the
        screensaver. */
-    SDL_DisableScreenSaver();
+    hint = SDL_GetHint(SDL_HINT_VIDEO_ALLOW_SCREENSAVER);
+    if (hint) {
+        allow_screensaver = SDL_atoi(hint) ? SDL_TRUE : SDL_FALSE;
+    } else {
+        allow_screensaver = SDL_FALSE;
+    }
+    if (!allow_screensaver) {
+        SDL_DisableScreenSaver();
+    }
 
     /* If we don't use a screen keyboard, turn on text input by default,
        otherwise programs that expect to get text events without enabling