Browse Source

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 d2f8fca98e)
v3.5.13-sru
Timothy Pearson 10 years ago committed by Slávek Banko
parent
commit
79c512a168
  1. 2
      krootbacking/krootbacking.cpp
  2. 43
      ksmserver/shutdown.cpp
  3. 30
      ksmserver/shutdowndlg.cpp
  4. 7
      ksmserver/shutdowndlg.h

2
krootbacking/krootbacking.cpp

@ -54,6 +54,8 @@ public:
KRootBacking::KRootBacking()
: TQObject(KApplication::desktop(), "KRootBacking" ), m_Desk(0), m_timeout(0)
{
enableExports();
init();
}

43
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

30
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) {

7
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();

Loading…
Cancel
Save