From f0e7224bc357c95f6231814173adb5b7f9369c59 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Thu, 24 May 2012 09:21:24 -0500 Subject: [PATCH] Fix kdesktop_lock XRandR event handling (cherry picked from commit b70ccd542a93d69df25a5af2ad930e21c546a8b6) --- kdesktop/lock/lockprocess.cc | 78 ++++++++++++++++++++++++------------ kdesktop/lock/lockprocess.h | 1 + 2 files changed, 53 insertions(+), 26 deletions(-) diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc index 307ece8b1..545cd8bc7 100644 --- a/kdesktop/lock/lockprocess.cc +++ b/kdesktop/lock/lockprocess.cc @@ -182,6 +182,7 @@ LockProcess::LockProcess() mHackDelayStartupTimer(NULL), mHackDelayStartupTimeout(0), mHackStartupEnabled(true), + mResizingDesktopLock(false), m_rootPixmap(NULL), mBackingStartupDelayTimer(0), m_startupStatusDialog(NULL), @@ -961,7 +962,10 @@ void LockProcess::createSaverWindow() void LockProcess::desktopResized() { mBusy = true; - suspend(); + mHackDelayStartupTimer->stop(); + stopHack(); + DISABLE_CONTINUOUS_LOCKDLG_DISPLAY + mResizingDesktopLock = true; // Get root window size XWindowAttributes rootAttr; @@ -987,36 +991,36 @@ void LockProcess::desktopResized() void LockProcess::doDesktopResizeFinish() { - stopHack(); - - while (mDialogControlLock == true) usleep(100000); - mDialogControlLock = true; - if (closeCurrentWindow()) { - TQTimer::singleShot( 0, this, SLOT(doDesktopResizeFinish()) ); - mDialogControlLock = false; - } - mDialogControlLock = false; + while (mDialogControlLock == true) usleep(100000); + mDialogControlLock = true; + if (closeCurrentWindow()) { + TQTimer::singleShot( 0, this, SLOT(doDesktopResizeFinish()) ); + mDialogControlLock = false; + return; + } + mDialogControlLock = false; - // Restart the hack as the window size is now different - if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced && trinity_desktop_lock_use_system_modal_dialogs) { - ENABLE_CONTINUOUS_LOCKDLG_DISPLAY - if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); - } - else { - if (mHackStartupEnabled == true) { - startHack(); + // Restart the hack as the window size is now different + if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced && trinity_desktop_lock_use_system_modal_dialogs) { + ENABLE_CONTINUOUS_LOCKDLG_DISPLAY + if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); } else { - if (trinity_desktop_lock_use_system_modal_dialogs == true) { - ENABLE_CONTINUOUS_LOCKDLG_DISPLAY + if (mHackStartupEnabled == true) { + startHack(); } else { - startHack(); + if (trinity_desktop_lock_use_system_modal_dialogs == true) { + ENABLE_CONTINUOUS_LOCKDLG_DISPLAY + } + else { + startHack(); + } } } - } - mBusy = false; + mResizingDesktopLock = false; + mBusy = false; } //--------------------------------------------------------------------------- @@ -1801,7 +1805,9 @@ int LockProcess::execDialog( TQDialog *dlg ) hackResumeTimer = new TQTimer( this ); connect( hackResumeTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(resumeUnforced()) ); } - hackResumeTimer->start( 10, TRUE ); + if (mResizingDesktopLock == false) { + hackResumeTimer->start( 10, TRUE ); + } } else { resume( false ); @@ -1976,7 +1982,25 @@ bool LockProcess::x11Event(XEvent *event) else { mSuspendTimer.stop(); - resume( false ); + if (mResizingDesktopLock == false) { + if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced && trinity_desktop_lock_use_system_modal_dialogs) { + ENABLE_CONTINUOUS_LOCKDLG_DISPLAY + if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); + } + else { + if (mHackStartupEnabled == true) { + resume( false ); + } + else { + if (trinity_desktop_lock_use_system_modal_dialogs == true) { + ENABLE_CONTINUOUS_LOCKDLG_DISPLAY + } + else { + resume( false ); + } + } + } + } } if (event->xvisibility.state != VisibilityUnobscured) stayOnTop(); @@ -2076,7 +2100,9 @@ void LockProcess::checkDPMSActive() suspend(); } else if ( mSuspended ) { - resume( true ); + if (mResizingDesktopLock == false) { + resume( true ); + } } #endif } diff --git a/kdesktop/lock/lockprocess.h b/kdesktop/lock/lockprocess.h index 25c6c0173..c5aba0ff8 100644 --- a/kdesktop/lock/lockprocess.h +++ b/kdesktop/lock/lockprocess.h @@ -192,6 +192,7 @@ private: int mHackDelayStartupTimeout; bool mHackStartupEnabled; + bool mResizingDesktopLock; TQPixmap backingPixmap; KRootPixmap *m_rootPixmap;