summaryrefslogtreecommitdiffstats
path: root/ksmserver
diff options
context:
space:
mode:
authorTimothy Pearson <[email protected]>2012-05-16 21:56:11 -0500
committerTimothy Pearson <[email protected]>2012-05-16 21:56:11 -0500
commitd2f8fca98e6d276f442f90dee48164be15d8e287 (patch)
treeb7315de120d566bcd002ce4330381801f814812b /ksmserver
parentd41f52171966007990bd9176cde217a8ba0f335a (diff)
downloadtdebase-d2f8fca98e6d276f442f90dee48164be15d8e287.tar.gz
tdebase-d2f8fca98e6d276f442f90dee48164be15d8e287.zip
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
Diffstat (limited to 'ksmserver')
-rw-r--r--ksmserver/shutdown.cpp43
-rw-r--r--ksmserver/shutdowndlg.cpp30
-rw-r--r--ksmserver/shutdowndlg.h7
3 files changed, 57 insertions, 23 deletions
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<KSMShutdownIPDlg*>(shutdownNotifierIPDlg)->setStatusMessage(i18n("Synchronizing remote folders").append("..."));
- }
- KRsync krs(this, "");
- krs.executeLogoutAutoSync();
- if (shutdownNotifierIPDlg) {
- static_cast<KSMShutdownIPDlg*>(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<KSMShutdownIPDlg*>(shutdownNotifierIPDlg)->setStatusMessage(i18n("Synchronizing remote folders").append("..."));
+ }
+ KRsync krs(this, "");
+ krs.executeLogoutAutoSync();
+ if (shutdownNotifierIPDlg) {
+ static_cast<KSMShutdownIPDlg*>(shutdownNotifierIPDlg)->setStatusMessage(i18n("Saving your settings..."));
+ }
+
if ( saveSession )
storeSession();
else
diff --git a/ksmserver/shutdowndlg.cpp b/ksmserver/shutdowndlg.cpp
index 163352acf..35cae6537 100644
--- a/ksmserver/shutdowndlg.cpp
+++ b/ksmserver/shutdowndlg.cpp
@@ -528,6 +528,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 &)));
@@ -554,15 +559,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(tqt_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 db66c55c8..05ca99126 100644
--- a/ksmserver/shutdowndlg.h
+++ b/ksmserver/shutdowndlg.h
@@ -103,6 +103,13 @@ public slots:
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();
int m_currentY;