From da955fd4da26cb78ed42f491669397ea4f1f7a69 Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Thu, 15 Oct 2009 19:51:49 +0200
Subject: [PATCH] [hildjj] go away under windows too when screensaver is
 active. Fixes #4178

---
 src/common/sleepy.py | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/src/common/sleepy.py b/src/common/sleepy.py
index d5f17edf2b..507452ea9e 100644
--- a/src/common/sleepy.py
+++ b/src/common/sleepy.py
@@ -43,6 +43,11 @@ try:
 
 		lastInputInfo = LASTINPUTINFO()
 		lastInputInfo.cbSize = ctypes.sizeof(lastInputInfo)
+
+		# one or more of these may not be supported before XP.
+		OpenInputDesktop = ctypes.windll.user32.OpenInputDesktop
+		CloseDesktop = ctypes.windll.user32.CloseDesktop
+		SystemParametersInfo = ctypes.windll.user32.SystemParametersInfoW
 	else: # unix
 		from common import idle
 except Exception:
@@ -65,6 +70,21 @@ class SleepyWindows:
 		if not SUPPORTED:
 			return False
 
+		# screen saver, in windows >= XP
+		saver_runing = ctypes.c_int(0)
+		# 0x72 is SPI_GETSCREENSAVERRUNNING
+		if SystemParametersInfo(0x72, 0, ctypes.byref(saver_runing), 0) and \
+		saver_runing.value:
+			self.state = STATE_XA
+			return True
+
+		desk = OpenInputDesktop(0, False, 0)
+		if not desk:
+			# Screen locked
+			self.state = STATE_XA
+			return True
+		CloseDesktop(desk)
+
 		idleTime = self.getIdleSec()
 
 		# xa is stronger than away so check for xa first
-- 
GitLab