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 ();
|