From: Sebastian Goth Date: Sat, 23 Apr 2016 11:39:59 +0000 (+0200) Subject: Support session management with Qt5 X-Git-Tag: travis-deploy-test~495^2 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=eebedfe2a4969420119687837654db7261806cd2 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. --- 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();