From 699217f5ac7e8ccf5a023fb13b3a26d38c1d847b Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sun, 5 Oct 2014 16:01:32 -0500 Subject: [PATCH] If drkonqi launches during logout show it after 30 seconds have elapsed --- ksmserver/server.cpp | 10 ++++++++++ ksmserver/server.h | 2 ++ ksmserver/shutdown.cpp | 19 +++++++++++++++---- libkonq/konq_dirpart.cc | 9 ++++++--- 4 files changed, 33 insertions(+), 7 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(); diff --git a/libkonq/konq_dirpart.cc b/libkonq/konq_dirpart.cc index ea1b19bb0..0cd801896 100644 --- a/libkonq/konq_dirpart.cc +++ b/libkonq/konq_dirpart.cc @@ -419,9 +419,11 @@ void KonqDirPart::slotClipboardDataChanged() KURL::List lst; TQMimeSource *data = TQApplication::clipboard()->data(); - if ( data->provides( "application/x-tde-cutselection" ) && data->provides( "text/uri-list" ) ) - if ( KonqDrag::decodeIsCutSelection( data ) ) + if ( data->provides( "application/x-tde-cutselection" ) && data->provides( "text/uri-list" ) ) { + if ( KonqDrag::decodeIsCutSelection( data ) ) { (void) KURLDrag::decode( data, lst ); + } + } disableIcons( lst ); @@ -432,8 +434,9 @@ void KonqDirPart::updatePasteAction() // KDE4: merge into method above { TQString actionText = TDEIO::pasteActionText(); bool paste = !actionText.isEmpty(); - if ( paste ) + if ( paste ) { emit m_extension->setActionText( "paste", actionText ); + } emit m_extension->enableAction( "paste", paste ); }