diff options
-rw-r--r-- | ksmserver/server.h | 1 | ||||
-rw-r--r-- | ksmserver/shutdown.cpp | 55 |
2 files changed, 45 insertions, 11 deletions
diff --git a/ksmserver/server.h b/ksmserver/server.h index d3c7099f9..ed608121c 100644 --- a/ksmserver/server.h +++ b/ksmserver/server.h @@ -238,6 +238,7 @@ private: WindowMap legacyWindows; TDEHardwareDevices* hwDevices; + int initialClientCount; }; #endif diff --git a/ksmserver/shutdown.cpp b/ksmserver/shutdown.cpp index 01f092257..b48276f03 100644 --- a/ksmserver/shutdown.cpp +++ b/ksmserver/shutdown.cpp @@ -604,13 +604,30 @@ void KSMServer::completeShutdownOrCheckpoint() if( logoutSoundEvent <= 0 ) { waitForKNotify = false; } + initialClientCount = clients.count(); + if (shutdownNotifierIPDlg) { + TQString nextClientToKill; + for( KSMClient* c = clients.first(); c; c = clients.next()) { + if( isWM( c ) || isCM( c ) || isNotifier( c ) ) { + continue; + } + nextClientToKill = c->program(); + } + if (nextClientToKill == "") { + static_cast<KSMShutdownIPDlg*>(shutdownNotifierIPDlg)->setStatusMessage(i18n("Closing applications (%1/%2)...").arg(initialClientCount-clients.count()).arg(initialClientCount)); + } + else { + static_cast<KSMShutdownIPDlg*>(shutdownNotifierIPDlg)->setStatusMessage(i18n("Closing applications (%1/%2, %3)...").arg(initialClientCount-clients.count()).arg(initialClientCount).arg(nextClientToKill)); + } + } if( waitForKNotify ) { state = WaitingForKNotify; knotifyTimeoutTimer.start( 20000, true ); return; } startKilling(); - } else if ( state == Checkpoint ) { + } + else if ( state == Checkpoint ) { for ( KSMClient* c = clients.first(); c; c = clients.next() ) { SmsSaveComplete( c->connection()); } @@ -632,8 +649,7 @@ void KSMServer::startKilling() SmsDie( c->connection() ); } - kdDebug( 1218 ) << " We killed all clients. We have now clients.count()=" << - clients.count() << endl; + kdDebug( 1218 ) << " We killed all clients. We have now clients.count()=" << clients.count() << endl; completeKilling(); TQTimer::singleShot( 10000, this, TQT_SLOT( timeoutQuit() ) ); } @@ -641,17 +657,33 @@ void KSMServer::startKilling() void KSMServer::completeKilling() { SHUTDOWN_MARKER("completeKilling"); - kdDebug( 1218 ) << "KSMServer::completeKilling clients.count()=" << - clients.count() << endl; + kdDebug( 1218 ) << "KSMServer::completeKilling clients.count()=" << clients.count() << endl; if( state == Killing ) { bool wait = false; + TQString nextClientToKill; for( KSMClient* c = clients.first(); c; c = clients.next()) { - if( isWM( c ) || isCM( c ) || isNotifier( c ) ) + if( isWM( c ) || isCM( c ) || isNotifier( c ) ) { continue; + } + nextClientToKill = c->program(); wait = true; // still waiting for clients to go away } - if( wait ) + if( wait ) { + if (shutdownNotifierIPDlg) { + if (nextClientToKill == "") { + static_cast<KSMShutdownIPDlg*>(shutdownNotifierIPDlg)->setStatusMessage(i18n("Closing applications (%1/%2)...").arg(initialClientCount-clients.count()).arg(initialClientCount)); + } + else { + static_cast<KSMShutdownIPDlg*>(shutdownNotifierIPDlg)->setStatusMessage(i18n("Closing applications (%1/%2, %3)...").arg(initialClientCount-clients.count()).arg(initialClientCount).arg(nextClientToKill)); + } + } return; + } + else { + if (shutdownNotifierIPDlg) { + static_cast<KSMShutdownIPDlg*>(shutdownNotifierIPDlg)->setStatusMessage(i18n("Terminating services...")); + } + } killWM(); } } @@ -682,18 +714,19 @@ void KSMServer::killWM() completeKillingWM(); TQTimer::singleShot( 5000, this, TQT_SLOT( timeoutWMQuit() ) ); } - else + else { killingCompleted(); + } } void KSMServer::completeKillingWM() { SHUTDOWN_MARKER("completeKillingWM"); - kdDebug( 1218 ) << "KSMServer::completeKillingWM clients.count()=" << - clients.count() << endl; + kdDebug( 1218 ) << "KSMServer::completeKillingWM clients.count()=" << clients.count() << endl; if( state == KillingWM ) { - if( clients.isEmpty()) + if( clients.isEmpty()) { killingCompleted(); + } } } |