diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2014-11-28 17:12:06 -0600 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2014-11-28 17:12:06 -0600 |
commit | 2f7d50c20cebb33745c0ecea5a5b6cc3f4747d6e (patch) | |
tree | 1e5904ff6869e62def20b14ca652c3b1da3a9440 /kdesktop/lock/lockprocess.cc | |
parent | 2c1d4ad359e90360708cffe70c298b264b302e49 (diff) | |
download | tdebase-2f7d50c20cebb33745c0ecea5a5b6cc3f4747d6e.tar.gz tdebase-2f7d50c20cebb33745c0ecea5a5b6cc3f4747d6e.zip |
Fix kdesktop_lock requiring a process stop/start on unlock
Attempt to fix kdesktop_lock start/stop causing dcop failures by keeping kdesktop_lock process running across lock/unlock cycles
Diffstat (limited to 'kdesktop/lock/lockprocess.cc')
-rw-r--r-- | kdesktop/lock/lockprocess.cc | 65 |
1 files changed, 36 insertions, 29 deletions
diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc index 3dacc7ff3..9612f5cca 100644 --- a/kdesktop/lock/lockprocess.cc +++ b/kdesktop/lock/lockprocess.cc @@ -159,15 +159,14 @@ extern bool trinity_desktop_lock_hide_active_windows; extern bool trinity_desktop_lock_hide_cancel_button; extern bool trinity_desktop_lock_forced; +extern LockProcess* trinity_desktop_lock_process; + extern bool argb_visual; extern pid_t kdesktop_pid; extern TQXLibWindowList trinity_desktop_lock_hidden_window_list; bool trinity_desktop_lock_autohide_lockdlg = TRUE; -bool trinity_desktop_lock_closing_windows = FALSE; -bool trinity_desktop_lock_in_sec_dlg = FALSE; -bool trinity_desktop_hack_active = FALSE; #define ENABLE_CONTINUOUS_LOCKDLG_DISPLAY \ if (!mForceContinualLockDisplayTimer->isActive()) mForceContinualLockDisplayTimer->start(100, FALSE); \ @@ -213,6 +212,9 @@ LockProcess::LockProcess() mOverrideHackStartupEnabled(false), mResizingDesktopLock(false), mFullyOnlineSent(false), + mClosingWindows(false), + mInSecureDialog(false), + mHackActive(false), m_rootPixmap(NULL), mBackingStartupDelayTimer(0), m_startupStatusDialog(NULL), @@ -418,7 +420,7 @@ static int signal_pipe[2]; static void sigterm_handler(int) { - if (!trinity_desktop_lock_in_sec_dlg) { + if ((!trinity_desktop_lock_process) || (!trinity_desktop_lock_process->inSecureDialog())) { // Exit uncleanly char tmp = 'U'; if (::write( signal_pipe[1], &tmp, 1) == -1) { @@ -437,7 +439,7 @@ static void sighup_handler(int) bool LockProcess::closeCurrentWindow() { - trinity_desktop_lock_closing_windows = TRUE; + mClosingWindows = TRUE; if (currentDialog != NULL) { mForceReject = true; if (dynamic_cast<SAKDlg*>(currentDialog)) { @@ -452,12 +454,12 @@ bool LockProcess::closeCurrentWindow() } if( mDialogs.isEmpty() ) { - trinity_desktop_lock_closing_windows = FALSE; + mClosingWindows = FALSE; mForceReject = false; return false; } else { - trinity_desktop_lock_closing_windows = TRUE; + mClosingWindows = TRUE; return true; } } @@ -621,9 +623,9 @@ void LockProcess::startSecureDialog() if (forcecontdisp) { DISABLE_CONTINUOUS_LOCKDLG_DISPLAY } - trinity_desktop_lock_in_sec_dlg = false; + mInSecureDialog = false; if (ret == 0) { - trinity_desktop_lock_closing_windows = 1; + mClosingWindows = 1; kapp->quit(); } if (ret == 1) { @@ -669,14 +671,14 @@ void LockProcess::startSecureDialog() return; } if (ret == 2) { - trinity_desktop_lock_closing_windows = 1; + mClosingWindows = 1; if (system("ksysguard &") == -1) { // Error handler to shut up gcc warnings } kapp->quit(); } if (ret == 3) { - trinity_desktop_lock_closing_windows = 1; + mClosingWindows = 1; DCOPRef("ksmserver","ksmserver").send("logout", (int)TDEApplication::ShutdownConfirmYes, (int)TDEApplication::ShutdownTypeNone, (int)TDEApplication::ShutdownModeInteractive); kapp->quit(); } @@ -699,7 +701,7 @@ bool LockProcess::runSecureDialog() tqApp->processEvents(); #endif - trinity_desktop_lock_in_sec_dlg = true; + mInSecureDialog = true; if (startSaver()) { mBackingStartupDelayTimer = 0; TQTimer::singleShot(0, this, TQT_SLOT(startSecureDialog())); @@ -710,6 +712,11 @@ bool LockProcess::runSecureDialog() } } +bool LockProcess::inSecureDialog() +{ + return mInSecureDialog; +} + //--------------------------------------------------------------------------- // // Read and apply configuration. @@ -1223,7 +1230,7 @@ bool LockProcess::grabKeyboard() bool LockProcess::grabMouse() { HANDLE cursorHandle; - if (trinity_desktop_hack_active) { + if (mHackActive) { cursorHandle = TQCursor(tqblankCursor).handle(); } else { @@ -1351,7 +1358,7 @@ bool LockProcess::startSaver(bool notify_ready) slotPaintBackground(rootWinSnapShot); } - if (((!(trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced)) && (!trinity_desktop_lock_in_sec_dlg)) && (mHackStartupEnabled || mOverrideHackStartupEnabled)) { + if (((!(trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced)) && (!mInSecureDialog)) && (mHackStartupEnabled || mOverrideHackStartupEnabled)) { if (argb_visual) { setTransparentBackgroundARGB(); } @@ -1377,7 +1384,7 @@ bool LockProcess::startSaver(bool notify_ready) } } - if (trinity_desktop_lock_in_sec_dlg == FALSE) { + if (mInSecureDialog == 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); @@ -1554,7 +1561,7 @@ void LockProcess::repaintRootWindowIfNeeded() bool LockProcess::startHack() { - trinity_desktop_hack_active = TRUE; + mHackActive = TRUE; if ((mEnsureVRootWindowSecurityTimer) && (!mEnsureVRootWindowSecurityTimer->isActive())) mEnsureVRootWindowSecurityTimer->start(250, FALSE); @@ -1715,7 +1722,7 @@ void LockProcess::stopHack() } setCursor( tqarrowCursor ); - trinity_desktop_hack_active = FALSE; + mHackActive = FALSE; } //--------------------------------------------------------------------------- @@ -1724,7 +1731,7 @@ void LockProcess::hackExited(TDEProcess *) { // Hack exited while we're supposed to be saving the screen. // Make sure the saver window is black. - trinity_desktop_hack_active = FALSE; + mHackActive = FALSE; usleep(100); TQApplication::syncX(); if (!trinity_desktop_lock_use_system_modal_dialogs) { @@ -1771,13 +1778,13 @@ void LockProcess::displayLockDialogIfNeeded() m_startupStatusDialog->closeSMDialog(); m_startupStatusDialog = NULL; } - if (!trinity_desktop_lock_in_sec_dlg) { + if (!mInSecureDialog) { if (trinity_desktop_lock_use_system_modal_dialogs) { if (!mBusy) { mBusy = true; if (mLocked) { if (checkPass()) { - trinity_desktop_lock_closing_windows = true; + mClosingWindows = true; stopSaver(); kapp->quit(); } @@ -1886,7 +1893,7 @@ bool LockProcess::checkPass() // Make sure we never launch the SAK or login dialog if windows are being closed down // Otherwise we can get stuck in an irrecoverable state where any attempt to show the login screen is instantly aborted - if (trinity_desktop_lock_closing_windows) { + if (mClosingWindows) { return 0; } @@ -1906,7 +1913,7 @@ bool LockProcess::checkPass() // Wait for SAK press before continuing... SAKDlg inDlg( this ); execDialog( &inDlg ); - if (trinity_desktop_lock_closing_windows) { + if (mClosingWindows) { return 0; } } @@ -1995,7 +2002,7 @@ int LockProcess::execDialog( TQDialog *dlg ) mDialogs.remove( dlg ); if( mDialogs.isEmpty() ) { HANDLE cursorHandle; - if (trinity_desktop_hack_active) { + if (mHackActive) { cursorHandle = TQCursor(tqblankCursor).handle(); } else { @@ -2179,7 +2186,7 @@ bool LockProcess::x11Event(XEvent *event) ENABLE_CONTINUOUS_LOCKDLG_DISPLAY if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE); } - if ((!mLocked) && (!trinity_desktop_lock_in_sec_dlg)) + if ((!mLocked) && (!mInSecureDialog)) { stopSaver(); kapp->quit(); @@ -2193,7 +2200,7 @@ bool LockProcess::x11Event(XEvent *event) else { if (!mLocked || checkPass()) { - trinity_desktop_lock_closing_windows = true; + mClosingWindows = true; stopSaver(); kapp->quit(); } @@ -2704,7 +2711,7 @@ void LockProcess::processInputPipeCommand(TQString inputcommand) { closeCurrentWindow(); } } - trinity_desktop_lock_closing_windows = false; + mClosingWindows = false; mInfoMessageDisplayed = false; mDialogControlLock = false; } @@ -2728,7 +2735,7 @@ void LockProcess::processInputPipeCommand(TQString inputcommand) { inDlg.setUnlockIcon(); execDialog( &inDlg ); mForceReject = false; - trinity_desktop_lock_closing_windows = false; + mClosingWindows = false; return; } if ((command[0] == 'E') || (command[0] == 'W') || (command[0] == 'I') || (command[0] == 'K')) { @@ -2754,7 +2761,7 @@ void LockProcess::processInputPipeCommand(TQString inputcommand) { if (command[0] == 'E') inDlg.setErrorIcon(); execDialog( &inDlg ); mForceReject = false; - trinity_desktop_lock_closing_windows = false; + mClosingWindows = false; return; } if (command[0] == 'Q') { @@ -2790,7 +2797,7 @@ void LockProcess::processInputPipeCommand(TQString inputcommand) { } } mForceReject = false; - trinity_desktop_lock_closing_windows = false; + mClosingWindows = false; return; } } |