[mythtv] [patch] screensaver DPMS support
Andrew Dennison
andrew-lists at optusnet.com.au
Mon Dec 13 11:07:05 UTC 2004
This patch adds support to disable DPMS when myth disables the
screensaver. Concept borrowed from mplayer, but I left out the hacks
that work around bugs on older DPMS versions.
Only quirk is that I had to define QT_CLEAN_NAMESPACE to turn off
"source compatibility with Qt 1.x" due to a clash with X headers. Maybe
this could be moved to the main flags instead?
Andrew
-------------- next part --------------
Index: libs/libmyth/screensaver-x11.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmyth/screensaver-x11.cpp,v
retrieving revision 1.3
diff -u -b -B -w -p -r1.3 screensaver-x11.cpp
--- libs/libmyth/screensaver-x11.cpp 26 Aug 2004 23:57:55 -0000 1.3
+++ libs/libmyth/screensaver-x11.cpp 13 Dec 2004 10:49:49 -0000
@@ -1,7 +1,13 @@
+#define QT_CLEAN_NAMESPACE // no qt 1.x compatability, INT32 conflicts with X
#include "screensaver.h"
+#include "mythcontext.h"
#include <X11/Xlib.h>
+extern "C" {
+#include <X11/extensions/dpms.h>
+}
+
class ScreenSaverPrivate
{
struct
@@ -11,6 +17,7 @@ class ScreenSaverPrivate
int interval;
int preferblank;
int allowexposure;
+ bool dpmsdisabled;
} state;
friend class ScreenSaverControl;
@@ -40,6 +47,22 @@ void ScreenSaverControl::Disable(void)
XResetScreenSaver(qt_xdisplay());
XSetScreenSaver(qt_xdisplay(), 0, 0, 0, 0);
+
+ int nothing;
+
+ if (DPMSQueryExtension(qt_xdisplay(), ¬hing, ¬hing))
+ {
+ BOOL on;
+ CARD16 power_level;
+
+ DPMSInfo(qt_xdisplay(), &power_level, &on);
+ if (on)
+ {
+ d->state.dpmsdisabled = true;
+ DPMSDisable(qt_xdisplay()); // monitor powersave off
+ VERBOSE(VB_GENERAL, "Disable DPMS");
+ }
+ }
}
void ScreenSaverControl::Restore(void)
@@ -50,6 +73,17 @@ void ScreenSaverControl::Restore(void)
d->state.preferblank,
d->state.allowexposure);
d->state.saved = false;
+
+ if (d->state.dpmsdisabled)
+ {
+ int nothing;
+ d->state.dpmsdisabled = false;
+ if (DPMSQueryExtension(qt_xdisplay(), ¬hing, ¬hing))
+ {
+ DPMSEnable(qt_xdisplay());
+ VERBOSE(VB_GENERAL, "Enable DPMS");
+ }
+ }
}
void ScreenSaverControl::Reset(void)
More information about the mythtv-dev
mailing list