summaryrefslogtreecommitdiffstats
path: root/kdesktop
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2013-04-24 14:36:01 -0500
committerSlávek Banko <slavek.banko@axis.cz>2013-04-25 03:25:21 +0200
commit52921d802e2311c746dca62dea86d20cbba0806d (patch)
tree5dfe6369884342d284260cd6d8dbf32ba9ab28e6 /kdesktop
parent9b1f3273e6fa37d395bde129c321bba3d4613034 (diff)
downloadtdebase-52921d802e2311c746dca62dea86d20cbba0806d.tar.gz
tdebase-52921d802e2311c746dca62dea86d20cbba0806d.zip
Fix kdesktop_lock interaction with DPMS power save
This partially resolves Bug 1475 (cherry picked from commit be61b99598ba2717e7764ed8c2b16aa4675a221c)
Diffstat (limited to 'kdesktop')
-rw-r--r--kdesktop/lock/lockprocess.cc69
1 files changed, 46 insertions, 23 deletions
diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc
index 138a80bfd..ef13d9076 100644
--- a/kdesktop/lock/lockprocess.cc
+++ b/kdesktop/lock/lockprocess.cc
@@ -130,6 +130,8 @@ Status DPMSInfo ( Display *, CARD16 *, BOOL * );
#define XF86XK_AudioLowerVolume 0x1008FF11
#define XF86XK_Display 0x1008FF59
+#define DPMS_MONITOR_BLANKED(x) ((x == DPMSModeStandby) || (x == DPMSModeSuspend) || (x == DPMSModeOff))
+
static Window gVRoot = 0;
static Window gVRootData = 0;
static Atom gXA_VROOT;
@@ -362,7 +364,7 @@ void LockProcess::init(bool child, bool useBlankOnly)
connect(&mSuspendTimer, TQT_SIGNAL(timeout()), TQT_SLOT(suspend()));
#ifdef HAVE_DPMS
- //if the user decided that the screensaver should run independent from
+ //if the user decided that the screensaver should run independent from
//dpms, we shouldn't check for it, aleXXX
if (KDesktopSettings::dpmsDependent()) {
BOOL on;
@@ -1491,15 +1493,34 @@ bool LockProcess::startLock()
void LockProcess::closeDialogAndStartHack()
{
- // Close any active dialogs
- DISABLE_CONTINUOUS_LOCKDLG_DISPLAY
- mSuspended = true;
- if (closeCurrentWindow()) {
- TQTimer::singleShot( 0, this, SLOT(closeDialogAndStartHack()) );
- }
- else {
- resume(true);
- }
+#ifdef HAVE_DPMS
+ if (KDesktopSettings::dpmsDependent()) {
+ BOOL on;
+ CARD16 state;
+ if (DPMSInfo(qt_xdisplay(), &state, &on)) {
+ //kdDebug() << "checkDPMSActive " << on << " " << state << endl;
+ if (DPMS_MONITOR_BLANKED(state)) {
+ // Make sure saver will attempt to start again after DPMS wakeup
+ // This is related to Bug 1475
+ ENABLE_CONTINUOUS_LOCKDLG_DISPLAY
+ if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE);
+ // Should not start saver here, because the DPMS check method below would turn it right back off!
+ // This is related to Bug 1475
+ return;
+ }
+ }
+ }
+#endif
+
+ // Close any active dialogs
+ DISABLE_CONTINUOUS_LOCKDLG_DISPLAY
+ mSuspended = true;
+ if (closeCurrentWindow()) {
+ TQTimer::singleShot( 0, this, SLOT(closeDialogAndStartHack()) );
+ }
+ else {
+ resume(true);
+ }
}
void LockProcess::repaintRootWindowIfNeeded()
@@ -2219,19 +2240,21 @@ void LockProcess::stayOnTop()
void LockProcess::checkDPMSActive()
{
#ifdef HAVE_DPMS
- BOOL on;
- CARD16 state;
- DPMSInfo(qt_xdisplay(), &state, &on);
- //kdDebug() << "checkDPMSActive " << on << " " << state << endl;
- if (state == DPMSModeStandby || state == DPMSModeSuspend || state == DPMSModeOff)
- {
- suspend();
- } else if ( mSuspended )
- {
- if (mResizingDesktopLock == false) {
- resume( true );
- }
- }
+ if (KDesktopSettings::dpmsDependent()) {
+ BOOL on;
+ CARD16 state;
+ if (DPMSInfo(qt_xdisplay(), &state, &on)) {
+ //kdDebug() << "checkDPMSActive " << on << " " << state << endl;
+ if (DPMS_MONITOR_BLANKED(state)) {
+ suspend();
+ }
+ else if (mSuspended) {
+ if (mResizingDesktopLock == false) {
+ resume( true );
+ }
+ }
+ }
+ }
#endif
}