Fix kdesktop_lock interaction with DPMS power save

This partially resolves Bug 1475
pull/2/head
Timothy Pearson 11 years ago
parent 93bbac1431
commit be61b99598

@ -130,6 +130,8 @@ Status DPMSInfo ( Display *, CARD16 *, BOOL * );
#define XF86XK_AudioLowerVolume 0x1008FF11 #define XF86XK_AudioLowerVolume 0x1008FF11
#define XF86XK_Display 0x1008FF59 #define XF86XK_Display 0x1008FF59
#define DPMS_MONITOR_BLANKED(x) ((x == DPMSModeStandby) || (x == DPMSModeSuspend) || (x == DPMSModeOff))
static Window gVRoot = 0; static Window gVRoot = 0;
static Window gVRootData = 0; static Window gVRootData = 0;
static Atom gXA_VROOT; static Atom gXA_VROOT;
@ -1436,6 +1438,25 @@ bool LockProcess::startLock()
void LockProcess::closeDialogAndStartHack() void LockProcess::closeDialogAndStartHack()
{ {
#ifdef HAVE_DPMS
if (KDesktopSettings::dpmsDependent()) {
BOOL on;
CARD16 state;
if (DPMSInfo(tqt_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 // Close any active dialogs
DISABLE_CONTINUOUS_LOCKDLG_DISPLAY DISABLE_CONTINUOUS_LOCKDLG_DISPLAY
mSuspended = true; mSuspended = true;
@ -2218,19 +2239,21 @@ void LockProcess::stayOnTop()
void LockProcess::checkDPMSActive() void LockProcess::checkDPMSActive()
{ {
#ifdef HAVE_DPMS #ifdef HAVE_DPMS
if (KDesktopSettings::dpmsDependent()) {
BOOL on; BOOL on;
CARD16 state; CARD16 state;
DPMSInfo(tqt_xdisplay(), &state, &on); if (DPMSInfo(tqt_xdisplay(), &state, &on)) {
//kdDebug() << "checkDPMSActive " << on << " " << state << endl; //kdDebug() << "checkDPMSActive " << on << " " << state << endl;
if (state == DPMSModeStandby || state == DPMSModeSuspend || state == DPMSModeOff) if (DPMS_MONITOR_BLANKED(state)) {
{
suspend(); suspend();
} else if ( mSuspended ) }
{ else if (mSuspended) {
if (mResizingDesktopLock == false) { if (mResizingDesktopLock == false) {
resume( true ); resume( true );
} }
} }
}
}
#endif #endif
} }

Loading…
Cancel
Save