Kaynağa Gözat

Added a hint to enable the screensaver by default

Sam Lantinga 11 yıl önce
ebeveyn
işleme
e56bbe3f71
2 değiştirilmiş dosya ile 22 ekleme ve 1 silme
  1. 11 0
      include/SDL_hints.h
  2. 11 1
      src/video/SDL_video.c

+ 11 - 0
include/SDL_hints.h

@@ -128,6 +128,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.
  *

+ 11 - 1
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