summaryrefslogtreecommitdiffstats
path: root/ksmserver
diff options
context:
space:
mode:
Diffstat (limited to 'ksmserver')
-rw-r--r--ksmserver/server.cpp10
-rw-r--r--ksmserver/server.h2
-rw-r--r--ksmserver/shutdown.cpp19
3 files changed, 27 insertions, 4 deletions
diff --git a/ksmserver/server.cpp b/ksmserver/server.cpp
index 1d98bc0a6..257d5f20c 100644
--- a/ksmserver/server.cpp
+++ b/ksmserver/server.cpp
@@ -972,6 +972,16 @@ bool KSMServer::isNotifier( const TQString& program ) const
return (program == "knotify");
}
+bool KSMServer::isCrashHandler( const KSMClient* client ) const
+{
+ return isNotifier( client->program());
+}
+
+bool KSMServer::isCrashHandler( const TQString& program ) const
+{
+ return (program == "drkonqi");
+}
+
bool KSMServer::defaultSession() const
{
return sessionGroup.isEmpty();
diff --git a/ksmserver/server.h b/ksmserver/server.h
index 8f17af231..f5e0d37c6 100644
--- a/ksmserver/server.h
+++ b/ksmserver/server.h
@@ -161,6 +161,8 @@ private:
bool isDesktop( const TQString& program ) const;
bool isNotifier( const KSMClient* client ) const;
bool isNotifier( const TQString& program ) const;
+ bool isCrashHandler( const KSMClient* client ) const;
+ bool isCrashHandler( const TQString& program ) const;
bool defaultSession() const; // empty session
void setupXIOErrorHandler();
diff --git a/ksmserver/shutdown.cpp b/ksmserver/shutdown.cpp
index 0dda6598c..d7eaafb0e 100644
--- a/ksmserver/shutdown.cpp
+++ b/ksmserver/shutdown.cpp
@@ -484,7 +484,7 @@ void KSMServer::updateLogoutStatusDialog()
if (c->saveYourselfDone) {
continue;
}
- if( isWM( c ) || isCM( c ) || isNotifier( c ) ) {
+ if( isWM( c ) || isCM( c ) || isNotifier( c ) || isDesktop( c ) ) {
continue;
}
waitingClients++;
@@ -814,7 +814,7 @@ void KSMServer::completeShutdownOrCheckpoint()
TQDateTime currentDateTime = TQDateTime::currentDateTime();
TQDateTime oldestFoundDateTime = currentDateTime;
for( KSMClient* c = clients.first(); c; c = clients.next()) {
- if( isWM( c ) || isCM( c ) || isNotifier( c ) ) {
+ if( isWM( c ) || isCM( c ) || isNotifier( c ) || isDesktop( c ) ) {
continue;
}
if (c->program() != "") {
@@ -857,8 +857,9 @@ void KSMServer::startKilling()
// kill all clients
state = Killing;
for ( KSMClient* c = clients.first(); c; c = clients.next() ) {
- if( isWM( c ) || isCM( c ) || isNotifier( c ) ) // kill the WM and CM as the last one in order to reduce flicker. Also wait to kill knotify to avoid logout delays
+ if( isWM( c ) || isCM( c ) || isNotifier( c ) || isDesktop( c ) ) { // kill the WM and CM as the last one in order to reduce flicker. Also wait to kill knotify to avoid logout delays
continue;
+ }
kdDebug( 1218 ) << "completeShutdown: client " << c->program() << "(" << c->clientId() << ")" << endl;
c->terminationRequestTimeStamp = TQDateTime::currentDateTime();
SmsDie( c->connection() );
@@ -883,7 +884,7 @@ void KSMServer::completeKilling()
TQDateTime currentDateTime = TQDateTime::currentDateTime();
TQDateTime oldestFoundDateTime = currentDateTime;
for( KSMClient* c = clients.first(); c; c = clients.next()) {
- if( isWM( c ) || isCM( c ) || isNotifier( c ) ) {
+ if( isWM( c ) || isCM( c ) || isNotifier( c ) || isDesktop( c ) ) {
continue;
}
if (c->program() != "") {
@@ -929,6 +930,11 @@ void KSMServer::killWM()
shutdownNotifierIPDlg=0;
}
for ( KSMClient* c = clients.first(); c; c = clients.next() ) {
+ if( isDesktop( c )) {
+ iswm = true;
+ c->terminationRequestTimeStamp = TQDateTime::currentDateTime();
+ SmsDie( c->connection() );
+ }
if( isNotifier( c )) {
iswm = true;
c->terminationRequestTimeStamp = TQDateTime::currentDateTime();
@@ -979,6 +985,11 @@ void KSMServer::killingCompleted()
if (child != 0) {
kapp->quit();
}
+ else if (child == 0) {
+ // If any remaining client(s) do not exit quickly (e.g. drkonqui) terminate so that they can be seen and interacted with
+ sleep(30);
+ exit(0);
+ }
}
else {
kapp->quit();