summaryrefslogtreecommitdiff
blob: e9a8bcde5ef589b954249051098885c8fbe17a56 (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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
Common subdirectories: cxfe/CVS and cxfe-mod/CVS
diff -uN cxfe/cxfe.c cxfe-mod/cxfe.c
--- cxfe/cxfe.c	2004-11-27 03:07:59.000000000 +0100
+++ cxfe-mod/cxfe.c	2005-01-15 06:40:05.724443072 +0100
@@ -103,8 +103,57 @@
   uint32_t  status;
 } MWMHints;
 
+static int dpms_disabled=0;
+static int timeout_save=0;
 
+void wsScreenSaverOn( Display *mDisplay )
+{
+ int nothing;
+ if ( dpms_disabled )
+  {
+   if ( DPMSQueryExtension( mDisplay,&nothing,&nothing ) )
+    {
+     if ( !DPMSEnable( mDisplay ) ) printf("DPMS restoring failed.\n"); // restoring power saving settings
+      else
+       {
+        // DPMS does not seem to be enabled unless we call DPMSInfo
+        BOOL onoff;
+        CARD16 state;
+        DPMSInfo( mDisplay,&state,&onoff );
+        if ( onoff ) printf("Successfully enabled DPMS.\n");
+         else printf("DPMS not enabled.\n");
+       }
+    }
+  }
+ if ( timeout_save )
+  {
+   int dummy, interval, prefer_blank, allow_exp;
+   XGetScreenSaver( mDisplay,&dummy,&interval,&prefer_blank,&allow_exp );
+   XSetScreenSaver( mDisplay,timeout_save,interval,prefer_blank,allow_exp );
+   XGetScreenSaver( mDisplay,&timeout_save,&interval,&prefer_blank,&allow_exp );
+  }
+}
 
+void wsScreenSaverOff( Display * mDisplay )
+{
+ int interval,prefer_blank,allow_exp,nothing;
+ if ( DPMSQueryExtension( mDisplay,&nothing,&nothing ) )
+  {
+   BOOL onoff;
+   CARD16 state;
+   DPMSInfo( mDisplay,&state,&onoff );
+   if ( onoff )
+    {
+      Status stat;
+      printf("Disabling DPMS.\n");
+      dpms_disabled=1;
+      stat=DPMSDisable( mDisplay );  // monitor powersave off
+      //mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"stat: %d.\n",stat );
+   }
+  }
+ XGetScreenSaver( mDisplay,&timeout_save,&interval,&prefer_blank,&allow_exp );
+ if ( timeout_save ) XSetScreenSaver( mDisplay,0,interval,prefer_blank,allow_exp ); // turning off screensaver
+}
 
 static void *osd_loop(void *dummy)
 {
@@ -755,6 +804,10 @@
 	       XLockDisplay(display);
 	       XUnmapWindow(display, window[fullscreen]);
 	       fullscreen = !fullscreen;
+	       if (fullscreen)
+		 wsScreenSaverOff(display);
+	       else
+		 wsScreenSaverOn(display);
 	       XMapRaised(display, window[fullscreen]);
 	       XSync(display, False);
 	       XTranslateCoordinates(display, window[fullscreen],
@@ -920,6 +973,7 @@
          }     
    }
 }
+
 char* makestring(char *string, int len)
 {
    int i;
@@ -1134,6 +1188,9 @@
     else
        completion_event = -1;
 
+    if (fullscreen)
+      wsScreenSaverOff(display);
+
     XMapRaised(display, window[fullscreen]);
 
     res_h = (DisplayWidth(display, screen) * 1000 / DisplayWidthMM(display, screen));
@@ -1293,6 +1350,7 @@
   
   if (x11) {
      XLockDisplay(display);
+     wsScreenSaverOn(display);
      XUnmapWindow(display,  window[fullscreen]);
      XDestroyWindow(display,  window[0]);
      XDestroyWindow(display,  window[1]);
diff -uN cxfe/main.h cxfe-mod/main.h
--- cxfe/main.h	2004-11-27 02:32:28.000000000 +0100
+++ cxfe-mod/main.h	2005-01-15 06:40:29.770787472 +0100
@@ -43,6 +43,7 @@
 #include <X11/Xatom.h>
 #include <X11/Xutil.h>
 #include <X11/extensions/XShm.h>
+#include <X11/extensions/dpms.h>
 #include <xine.h>
 #include <xine/xineutils.h>
 
Common subdirectories: cxfe/termio and cxfe-mod/termio