This patch set should prevent for following bug tracked on:
https://bugs.kde.org/show_bug.cgi?id=282639

From 509d2f1ece2fdee371032e155769f744dc18d525 Mon Sep 17 00:00:00 2001
From: Aaron Seigo <aseigo@kde.org>
Date: Fri, 30 Sep 2011 14:31:55 +0200
Subject: [PATCH 1/3] attempt to make requestShutdown more friendly: non-blocking, not require a sync of the xserver

---
 libs/kworkspace/kworkspace.cpp |   14 +++++---------
 libs/kworkspace/kworkspace.h   |    4 +---
 2 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/libs/kworkspace/kworkspace.cpp b/libs/kworkspace/kworkspace.cpp
index 0b4146e..96a435b 100644
--- a/libs/kworkspace/kworkspace.cpp
+++ b/libs/kworkspace/kworkspace.cpp
@@ -174,29 +174,25 @@ static void cleanup_sm()
 }
 #endif
 
-bool requestShutDown(
-    ShutdownConfirm confirm, ShutdownType sdtype, ShutdownMode sdmode )
+void requestShutDown(ShutdownConfirm confirm, ShutdownType sdtype, ShutdownMode sdmode)
 {
 #ifdef Q_WS_X11
-    QApplication::syncX();
-    kapp->updateRemoteUserTimestamp( "org.kde.ksmserver" );
     /*  use ksmserver's dcop interface if necessary  */
     if ( confirm == ShutdownConfirmYes ||
          sdtype != ShutdownTypeDefault ||
          sdmode != ShutdownModeDefault )
     {
         org::kde::KSMServerInterface ksmserver("org.kde.ksmserver", "/KSMServer", QDBusConnection::sessionBus());
-        QDBusReply<void> reply = ksmserver.logout((int)confirm,  (int)sdtype,  (int)sdmode);
-        return (reply.isValid());
+        ksmserver.logout((int)confirm,  (int)sdtype,  (int)sdmode);
+        return;
     }
+
     if( helper == NULL )
     {
         helper = new KRequestShutdownHelper();
         qAddPostRoutine(cleanup_sm);
     }
-    return helper->requestShutdown( confirm );
-#else
-    return false;
+    helper->requestShutdown( confirm );
 #endif
 }
 
diff --git a/libs/kworkspace/kworkspace.h b/libs/kworkspace/kworkspace.h
index 2516c3a..8868bf6 100644
--- a/libs/kworkspace/kworkspace.h
+++ b/libs/kworkspace/kworkspace.h
@@ -110,10 +110,8 @@ namespace KWorkSpace
    * ShutdownConfirm
    * @param sdtype The action to take after logging out. ShutdownType
    * @param sdmode If/When the action should be taken. ShutdownMode
-   * @return true on success, false if the session manager could not be
-   * contacted.
    */
-  KDE_EXPORT bool requestShutDown( ShutdownConfirm confirm = ShutdownConfirmDefault,
+  KDE_EXPORT void requestShutDown( ShutdownConfirm confirm = ShutdownConfirmDefault,
                                    ShutdownType    sdtype  = ShutdownTypeDefault,
                                    ShutdownMode    sdmode  = ShutdownModeDefault );
 
-- 
1.7.4.1

From a40c435195b07268a409ae83e9fbc1086be7c253 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maurice=20de=20la=20Fert=C3=A9?= <Maurice.Ferte@basyskom.de>
Date: Mon, 3 Oct 2011 23:02:36 +0200
Subject: [PATCH 2/3] update the user timestamp before showing the dialog

should prevent focus stealing preventing related issues where the dialog
goes behind other windows; this functionality was moved from libkworkspace

Conflicts:

	ksmserver/shutdown.cpp
---
 ksmserver/shutdown.cpp |   22 +++++++++++-----------
 1 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/ksmserver/shutdown.cpp b/ksmserver/shutdown.cpp
index a083545..d86ccaa 100644
--- a/ksmserver/shutdown.cpp
+++ b/ksmserver/shutdown.cpp
@@ -58,15 +58,15 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include <QTimer>
 #include <QtDBus/QtDBus>
 
-#include <klocale.h>
-#include <kglobal.h>
-#include <kconfig.h>
-#include <kstandarddirs.h>
-#include <kapplication.h>
-#include <ktemporaryfile.h>
-#include <kconfiggroup.h>
-#include <knotification.h>
-#include <kdisplaymanager.h>
+#include <KApplication>
+#include <KConfig>
+#include <KConfigGroup>
+#include <KGlobal>
+#include <KLocale>
+#include <KNotification>
+#include <KStandardDirs>
+#include <KTemporaryFile>
+#include <kworkspace/kdisplaymanager.h>
 #include "server.h"
 #include "global.h"
 #include "client.h"
@@ -152,9 +152,9 @@ void KSMServer::shutdown( KWorkSpace::ShutdownConfirm confirm,
     dialogActive = true;
     QString bopt;
     if ( !logoutConfirmed ) {
+        KApplication::kApplication()->updateUserTimestamp();
         KSMShutdownFeedback::start(); // make the screen gray
-        logoutConfirmed =
-            KSMShutdownDlg::confirmShutdown( maysd, choose, sdtype, bopt );
+        logoutConfirmed = KSMShutdownDlg::confirmShutdown( maysd, choose, sdtype, bopt );
         // ###### We can't make the screen remain gray while talking to the apps,
         // because this prevents interaction ("do you want to save", etc.)
         // TODO: turn the feedback widget into a list of apps to be closed,
-- 
1.7.4.1

From 61534bb9236c78632637f35429f0d66128089119 Mon Sep 17 00:00:00 2001
From: Aaron Seigo <aseigo@kde.org>
Date: Mon, 26 Sep 2011 14:57:53 +0200
Subject: [PATCH 3/3] simplify usage of requestShutDown

---
 .../desktop/applets/kickoff/core/itemhandlers.cpp  |    3 ---
 plasma/generic/applets/lock_logout/lockout.cpp     |    6 +-----
 .../containmentactions/contextmenu/menu.cpp        |    7 ++-----
 3 files changed, 3 insertions(+), 13 deletions(-)

diff --git a/plasma/desktop/applets/kickoff/core/itemhandlers.cpp b/plasma/desktop/applets/kickoff/core/itemhandlers.cpp
index 7364fc8..4e83c37 100644
--- a/plasma/desktop/applets/kickoff/core/itemhandlers.cpp
+++ b/plasma/desktop/applets/kickoff/core/itemhandlers.cpp
@@ -160,10 +160,7 @@ void LeaveItemHandler::logout()
         type = KWorkSpace::ShutdownTypeHalt;
     }
 
-//FIXME: the proper fix is to implement the KWorkSpace methods for Windows
-#ifndef Q_WS_WIN
     KWorkSpace::requestShutDown(confirm, type);
-#endif
 }
 
 void LeaveItemHandler::lock()
diff --git a/plasma/generic/applets/lock_logout/lockout.cpp b/plasma/generic/applets/lock_logout/lockout.cpp
index ecd8736..9a1a3bb 100644
--- a/plasma/generic/applets/lock_logout/lockout.cpp
+++ b/plasma/generic/applets/lock_logout/lockout.cpp
@@ -274,11 +274,7 @@ void LockOut::clickLogout()
     }
 
     kDebug()<<"LockOut:: logout clicked ";
-#ifndef Q_OS_WIN
-    KWorkSpace::requestShutDown( KWorkSpace::ShutdownConfirmDefault,
-                                 KWorkSpace::ShutdownTypeDefault,
-                                 KWorkSpace::ShutdownModeDefault);
-#endif
+    KWorkSpace::requestShutDown();
 }
 
 void LockOut::clickSwitchUser()
diff --git a/plasma/generic/containmentactions/contextmenu/menu.cpp b/plasma/generic/containmentactions/contextmenu/menu.cpp
index a328c8d..33f07e7 100644
--- a/plasma/generic/containmentactions/contextmenu/menu.cpp
+++ b/plasma/generic/containmentactions/contextmenu/menu.cpp
@@ -242,11 +242,8 @@ void ContextMenu::logout()
     if (!KAuthorized::authorizeKAction("logout")) {
         return;
     }
-#ifndef Q_WS_WIN
-    KWorkSpace::requestShutDown(KWorkSpace::ShutdownConfirmDefault,
-                                KWorkSpace::ShutdownTypeDefault,
-                                KWorkSpace::ShutdownModeDefault);
-#endif
+
+    KWorkSpace::requestShutDown();
 }
 
 QWidget* ContextMenu::createConfigurationInterface(QWidget* parent)
-- 
1.7.4.1

