Win32: Fix screensaver and blanking prevention

On Vista and later, Handling WM_SYSCOMMAND is not enough to prevent
password protected screensavers or monitor blanking.

Fixes #851.
This commit is contained in:
Camilla Löwy
2017-02-09 21:21:58 +01:00
parent 366b90be1a
commit 355b46e6c5
3 changed files with 12 additions and 0 deletions
+1
View File
@@ -248,6 +248,7 @@ typedef struct _GLFWlibraryWin32
{
HWND helperWindowHandle;
DWORD foregroundLockTimeout;
int acquiredMonitorCount;
char* clipboardString;
char keyName[64];
short int keycodes[512];
+9
View File
@@ -422,6 +422,11 @@ static GLFWbool acquireMonitor(_GLFWwindow* window)
GLFWbool status;
int xpos, ypos;
if (!_glfw.win32.acquiredMonitorCount)
SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED);
if (!window->monitor->window)
_glfw.win32.acquiredMonitorCount++;
status = _glfwSetVideoModeWin32(window->monitor, &window->videoMode);
_glfwPlatformGetVideoMode(window->monitor, &mode);
@@ -442,6 +447,10 @@ static void releaseMonitor(_GLFWwindow* window)
if (window->monitor->window != window)
return;
_glfw.win32.acquiredMonitorCount--;
if (!_glfw.win32.acquiredMonitorCount)
SetThreadExecutionState(ES_CONTINUOUS);
_glfwInputMonitorWindow(window->monitor, NULL);
_glfwRestoreVideoModeWin32(window->monitor);
}