diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2013-04-24 14:36:01 -0500 |
---|---|---|
committer | Slávek Banko <slavek.banko@axis.cz> | 2013-04-25 03:25:21 +0200 |
commit | 52921d802e2311c746dca62dea86d20cbba0806d (patch) | |
tree | 5dfe6369884342d284260cd6d8dbf32ba9ab28e6 | |
parent | 9b1f3273e6fa37d395bde129c321bba3d4613034 (diff) | |
download | tdebase-52921d802e2311c746dca62dea86d20cbba0806d.tar.gz tdebase-52921d802e2311c746dca62dea86d20cbba0806d.zip |
Fix kdesktop_lock interaction with DPMS power save
This partially resolves Bug 1475
(cherry picked from commit be61b99598ba2717e7764ed8c2b16aa4675a221c)
-rw-r--r-- | kdesktop/lock/lockprocess.cc | 69 |
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 } |