From db104c49b6c9b1e9a8a9e03b25688495c6f22193 Mon Sep 17 00:00:00 2001 From: Sebastian Goth Date: Sat, 23 Apr 2016 13:39:59 +0200 Subject: [PATCH] Support session management with Qt5 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 | 7 ++++++- src/qtui/qtuiapplication.h | 11 ++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/qtui/qtuiapplication.cpp b/src/qtui/qtuiapplication.cpp index 88b8bdb1..79c9e371 100644 --- a/src/qtui/qtuiapplication.cpp +++ b/src/qtui/qtuiapplication.cpp @@ -33,7 +33,6 @@ #include "qtui.h" #include "qtuisettings.h" - 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); + 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 } diff --git a/src/qtui/qtuiapplication.h b/src/qtui/qtuiapplication.h index 567d4827..514c37f1 100644 --- a/src/qtui/qtuiapplication.h +++ b/src/qtui/qtuiapplication.h @@ -50,11 +50,16 @@ public: virtual bool init(); void resumeSessionIfPossible(); - virtual void commitData(QSessionManager &manager); - virtual void saveState(QSessionManager &manager); - 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(); -- 2.20.1