diff options
author | Timothy Pearson <[email protected]> | 2013-05-03 15:55:11 -0500 |
---|---|---|
committer | Timothy Pearson <[email protected]> | 2013-05-03 15:55:11 -0500 |
commit | 3cce16c2543ebd7441477b466b35c89333eef28c (patch) | |
tree | cc54cc6cf5bdcaf59b96318400657be53efdca74 /kdesktop/lock | |
parent | 667839ee6560a10aca54885dbf8951b77bdc21b2 (diff) | |
download | tdebase-3cce16c2543ebd7441477b466b35c89333eef28c.tar.gz tdebase-3cce16c2543ebd7441477b466b35c89333eef28c.zip |
Properly fix task tray background glitches
Ensure session is fully locked before switching to new VT when lock is requested
Diffstat (limited to 'kdesktop/lock')
-rw-r--r-- | kdesktop/lock/lockprocess.cc | 19 | ||||
-rw-r--r-- | kdesktop/lock/lockprocess.h | 2 | ||||
-rw-r--r-- | kdesktop/lock/main.cc | 5 |
3 files changed, 24 insertions, 2 deletions
diff --git a/kdesktop/lock/lockprocess.cc b/kdesktop/lock/lockprocess.cc index e7b05d73c..33fd374aa 100644 --- a/kdesktop/lock/lockprocess.cc +++ b/kdesktop/lock/lockprocess.cc @@ -173,6 +173,7 @@ extern bool trinity_desktop_lock_hide_active_windows; extern bool trinity_desktop_lock_forced; extern bool argb_visual; +extern pid_t kdesktop_pid; extern TQXLibWindowList trinity_desktop_lock_hidden_window_list; @@ -224,6 +225,7 @@ LockProcess::LockProcess() mHackStartupEnabled(true), mOverrideHackStartupEnabled(false), mResizingDesktopLock(false), + mFullyOnlineSent(false), m_rootPixmap(NULL), mBackingStartupDelayTimer(0), m_startupStatusDialog(NULL), @@ -973,6 +975,8 @@ void LockProcess::createSaverWindow() } } + fullyOnline(); + kdDebug(1204) << "Saver window Id: " << winId() << endl; } @@ -2739,6 +2743,21 @@ void LockProcess::processInputPipeCommand(TQString inputcommand) { } } +void LockProcess::fullyOnline() { + if (!mFullyOnlineSent) { + if (kdesktop_pid > 0) { + if (kill(kdesktop_pid, SIGUSR2) < 0) { + // The controlling kdesktop process probably died. Commit suicide... + // Exit uncleanly + exit(1); + } + else { + mFullyOnlineSent = true; + } + } + } +} + //=========================================================================== // // Control pipe handler diff --git a/kdesktop/lock/lockprocess.h b/kdesktop/lock/lockprocess.h index 758297174..5b9649893 100644 --- a/kdesktop/lock/lockprocess.h +++ b/kdesktop/lock/lockprocess.h @@ -155,6 +155,7 @@ private: void windowAdded( WId window, bool managed ); void resume( bool force ); static TQVariant getConf(void *ctx, const char *key, const TQVariant &dflt); + void fullyOnline(); bool mLocked; int mLockGrace; @@ -220,6 +221,7 @@ private: bool mHackStartupEnabled; bool mOverrideHackStartupEnabled; bool mResizingDesktopLock; + bool mFullyOnlineSent; TQPixmap backingPixmap; KRootPixmap *m_rootPixmap; diff --git a/kdesktop/lock/main.cc b/kdesktop/lock/main.cc index 792764da1..f6fbc20b2 100644 --- a/kdesktop/lock/main.cc +++ b/kdesktop/lock/main.cc @@ -81,6 +81,7 @@ bool signalled_run; bool in_internal_mode = FALSE; bool argb_visual = FALSE; +pid_t kdesktop_pid = -1; static void sigusr1_handler(int) { @@ -490,8 +491,8 @@ int main( int argc, char **argv ) return ret; } else { - pid_t kdesktop_pid = atoi(args->getOption( "internal" )); - if (kill(kdesktop_pid, SIGUSR2) < 0) { + kdesktop_pid = atoi(args->getOption( "internal" )); + if (kill(kdesktop_pid, 0) < 0) { // The controlling kdesktop process probably died. Commit suicide... return 12; } |