/***************************************************************************
- * Copyright (C) 2005-2014 by the Quassel Project *
+ * Copyright (C) 2005-2015 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QIcon>
#include <QStringList>
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
# include <KStandardDirs>
#endif
#include "qtuisettings.h"
QtUiApplication::QtUiApplication(int &argc, char **argv)
-#ifdef HAVE_KDE
- : KApplication(),
+#ifdef HAVE_KDE4
+ : KApplication(), // KApplication is deprecated in KF5
#else
: QApplication(argc, argv),
#endif
Quassel(),
_aboutToQuit(false)
{
-#ifdef HAVE_KDE
+#ifdef HAVE_KDE4
Q_UNUSED(argc); Q_UNUSED(argv);
- // We need to setup KDE's data dirs
+ // 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].append("quassel/");
+ 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();
setDataDirPaths(dataDirs);
-#else /* HAVE_KDE */
+#else /* HAVE_KDE4 */
setDataDirPaths(findDataDirPaths());
-#endif /* HAVE_KDE */
+#endif /* HAVE_KDE4 */
-#if defined(HAVE_KDE) || defined(Q_OS_MAC)
+#if defined(HAVE_KDE4) || defined(Q_OS_MAC)
disableCrashhandler();
-#endif /* HAVE_KDE || Q_OS_MAC */
+#endif /* HAVE_KDE4 || Q_OS_MAC */
setRunMode(Quassel::ClientOnly);
#if QT_VERSION < 0x050000
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
}