Support session management with Qt5
authorSebastian Goth <seezer@roath.org>
Sat, 23 Apr 2016 11:39:59 +0000 (13:39 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Sun, 24 Apr 2016 20:14:58 +0000 (22:14 +0200)
Qt5 moved away from virtual methods towards signals for commitData() and saveState().
These were simply not called anymore in our code.

In Qt 5.6 a bug was fixed that broke session management at least with KF5.
As we do handle the session management, we can safely disable the fallback.
See QTBUG-49667 and https://codereview.qt-project.org/#/c/148274/ for details.

src/qtui/qtuiapplication.cpp
src/qtui/qtuiapplication.h

index 88b8bdb..79c9e37 100644 (file)
@@ -33,7 +33,6 @@
 #include "qtui.h"
 #include "qtuisettings.h"
 
 #include "qtui.h"
 #include "qtuisettings.h"
 
-
 QtUiApplication::QtUiApplication(int &argc, char **argv)
 #ifdef HAVE_KDE4
     : KApplication(),  // KApplication is deprecated in KF5
 QtUiApplication::QtUiApplication(int &argc, char **argv)
 #ifdef HAVE_KDE4
     : KApplication(),  // KApplication is deprecated in KF5
@@ -91,6 +90,12 @@ QtUiApplication::QtUiApplication(int &argc, char **argv)
     qInstallMsgHandler(Client::logMessage);
 #else
     qInstallMessageHandler(Client::logMessage);
     qInstallMsgHandler(Client::logMessage);
 #else
     qInstallMessageHandler(Client::logMessage);
+    connect(this, &QGuiApplication::commitDataRequest, this, &QtUiApplication::commitData, Qt::DirectConnection);
+    connect(this, &QGuiApplication::saveStateRequest, this, &QtUiApplication::saveState, Qt::DirectConnection);
+#endif
+
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
+    QGuiApplication::setFallbackSessionManagementEnabled(false);
 #endif
 }
 
 #endif
 }
 
index 567d482..514c37f 100644 (file)
@@ -50,11 +50,16 @@ public:
     virtual bool init();
 
     void resumeSessionIfPossible();
     virtual bool init();
 
     void resumeSessionIfPossible();
-    virtual void commitData(QSessionManager &manager);
-    virtual void saveState(QSessionManager &manager);
-
     inline bool isAboutToQuit() const { return _aboutToQuit; }
 
     inline bool isAboutToQuit() const { return _aboutToQuit; }
 
+#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
+    void commitData(QSessionManager &manager) override;
+    void saveState(QSessionManager &manager) override;
+#else
+    void commitData(QSessionManager &manager);
+    void saveState(QSessionManager &manager);
+#endif
+
 protected:
     virtual void quit();
 
 protected:
     virtual void quit();