diff --git a/src/app/exercisecontroller.cpp b/src/app/exercisecontroller.cpp --- a/src/app/exercisecontroller.cpp +++ b/src/app/exercisecontroller.cpp @@ -124,6 +124,25 @@ jsonDirs = QStandardPaths::locateAll(QStandardPaths::AppDataLocation, QStringLiteral("minuet/") + directoryName, QStandardPaths::LocateDirectory); #else jsonDirs = QStandardPaths::locateAll(QStandardPaths::AppDataLocation, directoryName, QStandardPaths::LocateDirectory); +#ifdef Q_OS_MACOS + // Qt does not check XDG_DATA_DIRS for MACOS but KDE prefix.sh script sets it. + // If AppDataLocation fail, we should give a shot and check XDG env variable + if (jsonDirs.isEmpty()) { + const QString xdgDataDirsEnv = QFile::decodeName(qgetenv("XDG_DATA_DIRS")); + if (!xdgDataDirsEnv.isEmpty()) { + const auto parts = xdgDataDirsEnv.splitRef(QLatin1Char(':'), QString::SkipEmptyParts); + // Normalize paths, skip relative paths + for (const QStringRef &dir : parts) { + if (dir.startsWith(QLatin1Char('/'))) { + const QDir testDir(QDir(dir.toString()).absoluteFilePath(QStringLiteral("minuet/") + directoryName)); + if (testDir.exists()) { + jsonDirs << testDir.absolutePath(); + } + } + } + } + } +#endif #endif foreach (const QString &jsonDirString, jsonDirs) { QDir jsonDir(jsonDirString);