qtui: Fix initialization order after switching to PMF connects
[quassel.git] / src / qtui / qtuiapplication.cpp
index fc04f59..9eea3c6 100644 (file)
 #include <QFile>
 #include <QStringList>
 
-#ifdef HAVE_KDE4
-#  include <KStandardDirs>
-#endif
-
 #include "chatviewsettings.h"
-#include "cliparser.h"
 #include "logmessage.h"
 #include "mainwin.h"
 #include "qtui.h"
 #include "types.h"
 
 QtUiApplication::QtUiApplication(int &argc, char **argv)
-#ifdef HAVE_KDE4
-    : KApplication()  // KApplication is deprecated in KF5
-#else
     : QApplication(argc, argv)
-#endif
 {
-#ifdef HAVE_KDE4
-    Q_UNUSED(argc); Q_UNUSED(argv);
-
-    // Setup KDE's data dirs
-    // Because we can't use KDE stuff in (the class) Quassel directly, we need to do this here...
-    QStringList dataDirs = KGlobal::dirs()->findDirs("data", "");
-
-    // Just in case, also check our install prefix
-    dataDirs << QCoreApplication::applicationDirPath() + "/../share/apps/";
-
-    // Normalize and append our application name
-    for (int i = 0; i < dataDirs.count(); i++)
-        dataDirs[i] = QDir::cleanPath(dataDirs.at(i)) + "/quassel/";
-
-    // Add resource path and just in case.
-    // Workdir should have precedence
-    dataDirs.prepend(QCoreApplication::applicationDirPath() + "/data/");
-    dataDirs.append(":/data/");
-
-    // Append trailing '/' and check for existence
-    auto iter = dataDirs.begin();
-    while (iter != dataDirs.end()) {
-        if (!iter->endsWith(QDir::separator()) && !iter->endsWith('/'))
-            iter->append(QDir::separator());
-        if (!QFile::exists(*iter))
-            iter = dataDirs.erase(iter);
-        else
-            ++iter;
-    }
-
-    dataDirs.removeDuplicates();
-    Quassel::setDataDirPaths(dataDirs);
-
-#else /* HAVE_KDE4 */
-
-    Quassel::setDataDirPaths(Quassel::findDataDirPaths());
-
-#endif /* HAVE_KDE4 */
-
-    Quassel::setRunMode(Quassel::ClientOnly);
-
-#if QT_VERSION >= 0x050000
-    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))
+#if QT_VERSION >= 0x050600
     QGuiApplication::setFallbackSessionManagementEnabled(false);
 #endif
 }
@@ -97,31 +42,24 @@ QtUiApplication::QtUiApplication(int &argc, char **argv)
 
 void QtUiApplication::init()
 {
-    if (!Quassel::init()) {
-        throw ExitException{EXIT_FAILURE, tr("Could not initialize Quassel!")};
-    }
-
     // Settings upgrade/downgrade handling
     if (!migrateSettings()) {
         throw ExitException{EXIT_FAILURE, tr("Could not load or upgrade client settings!")};
     }
 
-    _client.reset(new Client(std::unique_ptr<QtUi>(new QtUi())));  // TODO C++14: std::make_unique
+    _client = std::make_unique<Client>(std::make_unique<QtUi>());
 
     // Init UI only after the event loop has started
-    // TODO Qt5: Make this a lambda
-    QTimer::singleShot(0, this, SLOT(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();
+    });
 }