Преглед изворни кода

Fixed possible X11 screensaver race condition.

Camilla Berglund пре 12 година
родитељ
комит
dcb4d8ee32
3 измењених фајлова са 9 додато и 7 уклоњено
  1. 2 0
      README.md
  2. 1 1
      src/x11_platform.h
  3. 6 6
      src/x11_window.c

+ 2 - 0
README.md

@@ -110,6 +110,8 @@ See the [GLFW 3.0 documentation](http://www.glfw.org/docs/3.0/).
  - [Cocoa] Bugfix: Selectors were used that are not declared by the 10.6 SDK
  - [X11] Bugfix: Override-redirect windows were resized to the desired instead
                  of the actual resolution of the selected video mode
+ - [X11] Bugfix: Screensaver override for full screen windows had a possible
+                 race condition
 
 
 ## Contact

+ 1 - 1
src/x11_platform.h

@@ -173,7 +173,7 @@ typedef struct _GLFWlibraryX11
     int             keyCodeLUT[256];
 
     struct {
-        GLboolean   changed;
+        int         count;
         int         timeout;
         int         interval;
         int         blanking;

+ 6 - 6
src/x11_window.c

@@ -361,7 +361,7 @@ static void showCursor(_GLFWwindow* window)
 //
 static void enterFullscreenMode(_GLFWwindow* window)
 {
-    if (!_glfw.x11.saver.changed)
+    if (_glfw.x11.saver.count == 0)
     {
         // Remember old screen saver settings
         XGetScreenSaver(_glfw.x11.display,
@@ -373,10 +373,10 @@ static void enterFullscreenMode(_GLFWwindow* window)
         // Disable screen saver
         XSetScreenSaver(_glfw.x11.display, 0, 0, DontPreferBlanking,
                         DefaultExposures);
-
-        _glfw.x11.saver.changed = GL_TRUE;
     }
 
+    _glfw.x11.saver.count++;
+
     _glfwSetVideoMode(window->monitor, &window->videoMode);
 
     if (_glfw.x11.hasEWMH &&
@@ -455,7 +455,9 @@ static void leaveFullscreenMode(_GLFWwindow* window)
 {
     _glfwRestoreVideoMode(window->monitor);
 
-    if (_glfw.x11.saver.changed)
+    _glfw.x11.saver.count--;
+
+    if (_glfw.x11.saver.count == 0)
     {
         // Restore old screen saver settings
         XSetScreenSaver(_glfw.x11.display,
@@ -463,8 +465,6 @@ static void leaveFullscreenMode(_GLFWwindow* window)
                         _glfw.x11.saver.interval,
                         _glfw.x11.saver.blanking,
                         _glfw.x11.saver.exposure);
-
-        _glfw.x11.saver.changed = GL_FALSE;
     }
 
     if (_glfw.x11.hasEWMH &&