summaryrefslogtreecommitdiffstats
path: root/kdesktop
diff options
context:
space:
mode:
Diffstat (limited to 'kdesktop')
-rw-r--r--kdesktop/lock/lockprocess.cc19
-rw-r--r--kdesktop/lock/lockprocess.h2
-rw-r--r--kdesktop/lock/main.cc5
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;
}