X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Futil.cpp;h=a8a38875da75717a41329d8f6cb3bb71c626f456;hp=9e9bf88700dd2878c283400ecd1c697942a3af70;hb=6f99a6e2f39aaacabe8bb51a7bb1ff53c1b2082f;hpb=f824db0e31b54969e0b7fa0b5405b1e9173d482c diff --git a/src/common/util.cpp b/src/common/util.cpp index 9e9bf887..a8a38875 100644 --- a/src/common/util.cpp +++ b/src/common/util.cpp @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -175,6 +176,34 @@ QDir quasselDir() { return qDir; } +QStringList dataDirPaths() { + QStringList dataDirNames = QString(qgetenv("XDG_DATA_DIRS")).split(':', QString::SkipEmptyParts); + + // Provide a fallback +# ifdef Q_OS_UNIX + if(dataDirNames.isEmpty()) dataDirNames.append("/usr/share"); + // on UNIX, we always check our install prefix + QString appDir = QCoreApplication::applicationDirPath(); + int binpos = appDir.lastIndexOf("/bin"); + if(binpos >= 0) { + appDir.replace(binpos, 4, "/share"); + if(!dataDirNames.contains(appDir)) dataDirNames.append(appDir); + } +# endif + + return dataDirNames; +} + +QString findDataFilePath(const QString &fileName) { + QStringList dataDirs = dataDirPaths(); + foreach(QString dataDir, dataDirs) { + QString path = dataDir + "/apps/quassel/" + fileName; + if(QFile::exists(path)) + return path; + } + return QString(); +} + void loadTranslation(const QLocale &locale) { QTranslator *qtTranslator = QCoreApplication::instance()->findChild("QtTr"); QTranslator *quasselTranslator = QCoreApplication::instance()->findChild("QuasselTr");