From: Manuel Nickschas Date: Thu, 13 Sep 2018 21:35:29 +0000 (+0200) Subject: qtui: Fix initialization order after switching to PMF connects X-Git-Tag: test-travis-01~131 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=a0e333e994dce2d949a84930293382020e724596 qtui: Fix initialization order after switching to PMF connects Seems like switching to PMF connections has changed the order signals are processed in, resulting in the UI being initialized after the session manager asks for saving the UI state (for whatever reason). Make this less fragile (and avoid a crash when using KDE) by connecting to the session manager only after initializing the UI, and replace the initUi() slot by a lambda while we're at it. --- diff --git a/src/qtui/qtuiapplication.cpp b/src/qtui/qtuiapplication.cpp index cb4f91c8..9eea3c61 100644 --- a/src/qtui/qtuiapplication.cpp +++ b/src/qtui/qtuiapplication.cpp @@ -34,9 +34,6 @@ QtUiApplication::QtUiApplication(int &argc, char **argv) : QApplication(argc, argv) { - connect(this, &QGuiApplication::commitDataRequest, this, &QtUiApplication::commitData, Qt::DirectConnection); - connect(this, &QGuiApplication::saveStateRequest, this, &QtUiApplication::saveState, Qt::DirectConnection); - #if QT_VERSION >= 0x050600 QGuiApplication::setFallbackSessionManagementEnabled(false); #endif @@ -53,19 +50,16 @@ void QtUiApplication::init() _client = std::make_unique(std::make_unique()); // Init UI only after the event loop has started - // TODO Qt5: Make this a lambda - QTimer::singleShot(0, this, &QtUiApplication::initUi); -} - - -void QtUiApplication::initUi() -{ - QtUi::instance()->init(); + QTimer::singleShot(0, this, [this]() { + QtUi::instance()->init(); + connect(this, &QGuiApplication::commitDataRequest, this, &QtUiApplication::commitData, Qt::DirectConnection); + connect(this, &QGuiApplication::saveStateRequest, this, &QtUiApplication::saveState, Qt::DirectConnection); - // Needs to happen after UI init, so the MainWin quit handler is registered first - Quassel::registerQuitHandler(quitHandler()); + // Needs to happen after UI init, so the MainWin quit handler is registered first + Quassel::registerQuitHandler(quitHandler()); - resumeSessionIfPossible(); + resumeSessionIfPossible(); + }); } diff --git a/src/qtui/qtuiapplication.h b/src/qtui/qtuiapplication.h index 39eea07c..ad978ac8 100644 --- a/src/qtui/qtuiapplication.h +++ b/src/qtui/qtuiapplication.h @@ -75,9 +75,6 @@ private: */ bool applySettingsMigration(QtUiSettings settings, const uint newVersion); -private slots: - void initUi(); - protected: std::unique_ptr _client;