From 79c512a168677b441ee6141d5dbe6b0a9d778386 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Wed, 16 May 2012 21:56:11 -0500 Subject: [PATCH] Fix fancy logout not allowing interaction with save dialogs This closes Bug 922 Fix desktop wallpaper export failing when triggered by krootbacking or ksmserver and konsole or kdesktop_lock not previously loaded (cherry picked from commit d2f8fca98e6d276f442f90dee48164be15d8e287) --- krootbacking/krootbacking.cpp | 2 ++ ksmserver/shutdown.cpp | 43 ++++++++++++++++++----------------- ksmserver/shutdowndlg.cpp | 30 ++++++++++++++++++++++-- ksmserver/shutdowndlg.h | 7 ++++++ 4 files changed, 59 insertions(+), 23 deletions(-) diff --git a/krootbacking/krootbacking.cpp b/krootbacking/krootbacking.cpp index fa4797966..abd175d48 100644 --- a/krootbacking/krootbacking.cpp +++ b/krootbacking/krootbacking.cpp @@ -54,6 +54,8 @@ public: KRootBacking::KRootBacking() : TQObject(KApplication::desktop(), "KRootBacking" ), m_Desk(0), m_timeout(0) { + enableExports(); + init(); } diff --git a/ksmserver/shutdown.cpp b/ksmserver/shutdown.cpp index a4ca020e6..09cb2d743 100644 --- a/ksmserver/shutdown.cpp +++ b/ksmserver/shutdown.cpp @@ -189,24 +189,6 @@ void KSMServer::shutdownInternal( KApplication::ShutdownConfirm confirm, // shall we save the session on logout? saveSession = ( config->readEntry( "loginMode", "restorePreviousLogout" ) == "restorePreviousLogout" ); - if (showFancyLogout) { - KSMShutdownIPFeedback::showit(); // hide the UGLY logout process from the user - shutdownNotifierIPDlg = KSMShutdownIPDlg::showShutdownIP(); - while (!KSMShutdownIPFeedback::ispainted()) { - tqApp->processEvents(); - } - } - - // synchronize any folders that were requested for shutdown sync - if (shutdownNotifierIPDlg) { - static_cast(shutdownNotifierIPDlg)->setStatusMessage(i18n("Synchronizing remote folders").append("...")); - } - KRsync krs(this, ""); - krs.executeLogoutAutoSync(); - if (shutdownNotifierIPDlg) { - static_cast(shutdownNotifierIPDlg)->setStatusMessage(i18n("Saving your settings...")); - } - if ( saveSession ) sessionGroup = TQString("Session: ") + SESSION_PREVIOUS_LOGOUT; @@ -252,9 +234,9 @@ void KSMServer::shutdownInternal( KApplication::ShutdownConfirm confirm, completeShutdownOrCheckpoint(); } else { - if (showFancyLogout) { - KSMShutdownIPFeedback::stop(); - } + if (showFancyLogout) { + KSMShutdownIPFeedback::stop(); + } } dialogActive = false; } @@ -502,6 +484,25 @@ void KSMServer::completeShutdownOrCheckpoint() if ( waitForPhase2 ) return; + bool showFancyLogout = KConfigGroup(KGlobal::config(), "Logout").readBoolEntry("showFancyLogout", true); + if (showFancyLogout) { + KSMShutdownIPFeedback::showit(); // hide the UGLY logout process from the user + shutdownNotifierIPDlg = KSMShutdownIPDlg::showShutdownIP(); + while (!KSMShutdownIPFeedback::ispainted()) { + tqApp->processEvents(); + } + } + + // synchronize any folders that were requested for shutdown sync + if (shutdownNotifierIPDlg) { + static_cast(shutdownNotifierIPDlg)->setStatusMessage(i18n("Synchronizing remote folders").append("...")); + } + KRsync krs(this, ""); + krs.executeLogoutAutoSync(); + if (shutdownNotifierIPDlg) { + static_cast(shutdownNotifierIPDlg)->setStatusMessage(i18n("Saving your settings...")); + } + if ( saveSession ) storeSession(); else diff --git a/ksmserver/shutdowndlg.cpp b/ksmserver/shutdowndlg.cpp index 6451e357d..d235879df 100644 --- a/ksmserver/shutdowndlg.cpp +++ b/ksmserver/shutdowndlg.cpp @@ -519,6 +519,11 @@ KSMShutdownIPFeedback::KSMShutdownIPFeedback() : TQWidget( 0L, "systemmodaldialogclass", Qt::WStyle_Customize | Qt::WStyle_NoBorder | Qt::WStyle_StaysOnTop ), m_timeout(0), m_isPainted(false), m_sharedRootPixmap(NULL), mPixmapTimeout(0) { + setShown(false); + hide(); + + enableExports(); + m_sharedRootPixmap = new KRootPixmap(this); m_sharedRootPixmap->setCustomPainting(true); connect(m_sharedRootPixmap, TQT_SIGNAL(backgroundUpdated(const TQPixmap &)), this, TQT_SLOT(slotSetBackgroundPixmap(const TQPixmap &))); @@ -545,15 +550,36 @@ KSMShutdownIPFeedback::KSMShutdownIPFeedback() setBackgroundPixmap( m_root ); setGeometry( TQApplication::desktop()->geometry() ); setBackgroundMode( TQWidget::NoBackground ); - - setShown(true); } void KSMShutdownIPFeedback::showNow() { + setShown(true); + TQTimer::singleShot( 0, this, SLOT(slotPaintEffect()) ); } +void KSMShutdownIPFeedback::enableExports() +{ +#ifdef Q_WS_X11 + kdDebug(270) << k_lineinfo << "activating background exports.\n"; + DCOPClient *client = kapp->dcopClient(); + if (!client->isAttached()) { + client->attach(); + } + TQByteArray data; + TQDataStream args( data, IO_WriteOnly ); + args << 1; + + TQCString appname( "kdesktop" ); + int screen_number = DefaultScreen(qt_xdisplay()); + if ( screen_number ) + appname.sprintf("kdesktop-screen-%d", screen_number ); + + client->send( appname, "KBackgroundIface", "setExport(int)", data ); +#endif +} + KSMShutdownIPFeedback::~KSMShutdownIPFeedback() { if (m_sharedRootPixmap) { diff --git a/ksmserver/shutdowndlg.h b/ksmserver/shutdowndlg.h index 89f508602..fc63b19c6 100644 --- a/ksmserver/shutdowndlg.h +++ b/ksmserver/shutdowndlg.h @@ -96,6 +96,13 @@ public slots: void slotPaintEffect(); void slotSetBackgroundPixmap(const TQPixmap &); +private: + /** + * Asks KDesktop to export the desktop background as a KSharedPixmap. + * This method uses DCOP to call KBackgroundIface/setExport(int). + */ + void enableExports(); + private: static KSMShutdownIPFeedback * s_pSelf; KSMShutdownIPFeedback();