summaryrefslogtreecommitdiffstats
path: root/kdesktop/lock
diff options
context:
space:
mode:
Diffstat (limited to 'kdesktop/lock')
-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 a0d8b781e..ff12d2059 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),
@@ -1091,6 +1093,8 @@ void LockProcess::createSaverWindow()
}
}
+ fullyOnline();
+
kdDebug(1204) << "Saver window Id: " << winId() << endl;
}
@@ -2751,4 +2755,19 @@ void LockProcess::slotMouseActivity(XEvent *event)
}
}
+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;
+ }
+ }
+ }
+}
+
#include "lockprocess.moc"
diff --git a/kdesktop/lock/lockprocess.h b/kdesktop/lock/lockprocess.h
index bac71823e..1630d3a78 100644
--- a/kdesktop/lock/lockprocess.h
+++ b/kdesktop/lock/lockprocess.h
@@ -133,6 +133,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;
@@ -198,6 +199,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 b920399c2..74b7b7f26 100644
--- a/kdesktop/lock/main.cc
+++ b/kdesktop/lock/main.cc
@@ -78,6 +78,7 @@ bool signalled_run;
bool in_internal_mode = FALSE;
bool argb_visual = FALSE;
+pid_t kdesktop_pid = -1;
static void sigusr1_handler(int)
{
@@ -449,8 +450,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;
}