summaryrefslogtreecommitdiff
path: root/extra/libreoffice/prevent_KDE_Qt_from_interfering_with_the_session_manager.diff
diff options
context:
space:
mode:
Diffstat (limited to 'extra/libreoffice/prevent_KDE_Qt_from_interfering_with_the_session_manager.diff')
-rw-r--r--extra/libreoffice/prevent_KDE_Qt_from_interfering_with_the_session_manager.diff72
1 files changed, 72 insertions, 0 deletions
diff --git a/extra/libreoffice/prevent_KDE_Qt_from_interfering_with_the_session_manager.diff b/extra/libreoffice/prevent_KDE_Qt_from_interfering_with_the_session_manager.diff
new file mode 100644
index 000000000..07062a840
--- /dev/null
+++ b/extra/libreoffice/prevent_KDE_Qt_from_interfering_with_the_session_manager.diff
@@ -0,0 +1,72 @@
+From 01d128557726134b5da9e9b951e60286eac311a8 Mon Sep 17 00:00:00 2001
+From: Luboš Luňák <l.lunak@collabora.com>
+Date: Tue, 25 Mar 2014 12:20:16 +0100
+Subject: [PATCH] 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)
+---
+
+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 @@
+
+ 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);
+ };
+
+