summarylogtreecommitdiffstats
path: root/11-fix-no-dpms.patch
blob: fd11dca78b67397d1759496df6954f73279c810e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Description: Fix no DPMS detection
 xautolock reset when the screen blanks
Author: Roland Stigge <stigge@antcom.de>
Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=545778

diff -x debian -Naur xautolock-2.1.orig/include/config.h xautolock-2.1/include/config.h
--- xautolock-2.1.orig/include/config.h	2002-01-15 11:02:14.000000000 -0430
+++ xautolock-2.1/include/config.h	2010-01-07 09:52:22.000000000 -0430
@@ -64,6 +64,7 @@
 
 #ifdef HasScreenSaver
 #include <X11/extensions/scrnsaver.h>
+#include <X11/extensions/dpms.h>
 #endif /* HasScreenSaver */
 
 #ifndef HasVFork
diff -x debian -Naur xautolock-2.1.orig/src/engine.c xautolock-2.1/src/engine.c
--- xautolock-2.1.orig/src/engine.c	2002-01-15 11:07:31.000000000 -0430
+++ xautolock-2.1/src/engine.c	2010-01-07 09:52:22.000000000 -0430
@@ -30,7 +30,10 @@
 void 
 queryIdleTime (Display* d, Bool use_xidle)
 {
-  Time idleTime = 0; /* millisecs since last input event */
+  int dummy;
+  CARD16 standby, suspend, off;
+  CARD16 state;
+  BOOL onoff;  Time idleTime = 0; /* millisecs since last input event */
 
 #ifdef HasXidle
   if (use_xidle)
@@ -48,6 +51,33 @@
 #endif /* HasScreenSaver */
   }
 
+  if (DPMSQueryExtension(d, &dummy, &dummy)) {
+    if (DPMSCapable(d)) {
+      DPMSGetTimeouts(d, &standby, &suspend, &off);
+      DPMSInfo(d, &state, &onoff);
+
+      if (onoff) {
+        switch (state) {
+          case DPMSModeStandby:
+            if (idleTime < (unsigned) (standby * 1000))
+              idleTime += (standby * 1000);
+            break;
+          case DPMSModeSuspend:
+            if (idleTime < (unsigned) ((suspend + standby) * 1000))
+              idleTime += ((suspend + standby) * 1000);
+            break;
+          case DPMSModeOff:
+            if (idleTime < (unsigned) ((off + suspend + standby) * 1000))
+              idleTime += ((off + suspend + standby) * 1000);
+            break;
+          case DPMSModeOn:
+          default:
+            break;
+        }
+      }
+    } 
+  }
+
   if (idleTime < 1000)  
   {
     resetTriggers ();