You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tde-packaging/redhat/kdebase/kdebase-3.5.13-fix_fancy_lo...

163 lines
5.6 KiB

commit d2f8fca98e6d276f442f90dee48164be15d8e287
Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>
Date: 1337223371 -0500
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
diff --git a/krootbacking/krootbacking.cpp b/krootbacking/krootbacking.cpp
index 8e41b50..fe8574a 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 a4ca020..09cb2d7 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 163352a..35cae65 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(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 db66c55..05ca991 100644
--- a/ksmserver/shutdowndlg.h
+++ b/ksmserver/shutdowndlg.h
@@ -97,6 +97,13 @@
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;