[Libreoffice-commits] core.git: Branch 'libreoffice-4-2' - vcl/unx

Luboš Luňák l.lunak at collabora.com
Sun Apr 20 02:45:35 PDT 2014


 vcl/unx/kde4/KDEXLib.cxx           |   17 ++++++++++++++++-
 vcl/unx/kde4/VCLKDEApplication.hxx |    8 --------
 2 files changed, 16 insertions(+), 9 deletions(-)

New commits:
commit bac09c5da376c2874c677169e4329be0a4a10cf3
Author: Luboš Luňák <l.lunak at collabora.com>
Date:   Tue Mar 25 12:20:16 2014 +0100

    prevent KDE/Qt from interfering with the session manager
    
    I occassionally get lockups in IceProcessMessages() called from QtCore,
    I'm actually not exactly sure why, as theoretically two connections
    from one app shouldn't be a problem, but since LO does its own
    session handling, there's no need to the KDE/Qt code to be involved,
    so prevent it from connecting to the session manager altogether.
    
    Change-Id: Iebe20d4cb5403e5fea8bd5d8c1f69b62d1c2907b
    (cherry picked from commit 71f2aff7a56cef4e133abad3c2e447c76c5ee1fe)
    Reviewed-on: https://gerrit.libreoffice.org/9079
    Reviewed-by: Maxim Monastirsky <momonasmon at gmail.com>
    Tested-by: Maxim Monastirsky <momonasmon at gmail.com>

diff --git a/vcl/unx/kde4/KDEXLib.cxx b/vcl/unx/kde4/KDEXLib.cxx
index 820d39a..e4900a7 100644
--- a/vcl/unx/kde4/KDEXLib.cxx
+++ b/vcl/unx/kde4/KDEXLib.cxx
@@ -166,8 +166,23 @@ void KDEXLib::Init()
 
     KCmdLineArgs::init( m_nFakeCmdLineArgs, m_pAppCmdLineArgs, kAboutData );
 
+    // LO does its own session management, so prevent KDE/Qt from interfering
+    // (QApplication::disableSessionManagement(false) wouldn't quite do,
+    // since that still actually connects to the session manager, it just
+    // won't save the application data on session shutdown).
+    char* session_manager = NULL;
+    if( getenv( "SESSION_MANAGER" ) != NULL )
+    {
+        session_manager = strdup( getenv( "SESSION_MANAGER" ));
+        unsetenv( "SESSION_MANAGER" );
+    }
     m_pApplication = new VCLKDEApplication();
-    kapp->disableSessionManagement();
+    if( session_manager != NULL )
+    {
+        setenv( "SESSION_MANAGER", session_manager, 1 );
+        free( session_manager );
+    }
+
     KApplication::setQuitOnLastWindowClosed(false);
 
 #if KDE_HAVE_GLIB
diff --git a/vcl/unx/kde4/VCLKDEApplication.hxx b/vcl/unx/kde4/VCLKDEApplication.hxx
index 412ee34..4ce0b2c 100644
--- a/vcl/unx/kde4/VCLKDEApplication.hxx
+++ b/vcl/unx/kde4/VCLKDEApplication.hxx
@@ -21,22 +21,14 @@
 
 #define Region QtXRegion
 
-#include <QSessionManager>
-
 #include <kapplication.h>
 
 #undef Region
 
-/* #i59042# override KApplications method for session management
- * since it will interfere badly with our own.
- */
 class VCLKDEApplication : public KApplication
 {
     public:
         VCLKDEApplication();
-
-        virtual void commitData(QSessionManager&) {};
-
         virtual bool x11EventFilter(XEvent* event);
 };
 


More information about the Libreoffice-commits mailing list