diff --git a/src/filewidgets/knewfilemenu.cpp b/src/filewidgets/knewfilemenu.cpp --- a/src/filewidgets/knewfilemenu.cpp +++ b/src/filewidgets/knewfilemenu.cpp @@ -892,7 +892,29 @@ //qDebug(); const QStringList qrcTemplates = { QStringLiteral(":/kio5/newfile-templates") }; - const QStringList installedTemplates = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("templates"), QStandardPaths::LocateDirectory); + QStringList installedTemplates = { QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("templates"), QStandardPaths::LocateDirectory) }; + // Qt does not provide as easy way to recieve the xdg dir for templates so we have to find it by our own + QString xdgUserDirs = QStandardPaths::locate(QStandardPaths::ConfigLocation, QStringLiteral("user-dirs.dirs"), QStandardPaths::LocateFile); + QFile xdgUserDirsFile(xdgUserDirs); + if (xdgUserDirsFile.exists() && xdgUserDirsFile.open(QIODevice::ReadOnly | QIODevice::Text)) { + QTextStream in(&xdgUserDirsFile); + while (!in.atEnd()) { + QString line = in.readLine(); + if (line.startsWith("XDG_TEMPLATES_DIR=")) { + QString xdgTemplates = line.mid(19, line.size()-20); + xdgTemplates.replace(QString("$HOME/"), QStandardPaths::locate(QStandardPaths::HomeLocation, QString(), QStandardPaths::LocateDirectory)); + QDir xdgTemplatesDir(xdgTemplates); + if (xdgTemplatesDir.exists()) { + installedTemplates << xdgTemplates; + } else { + xdgTemplates = nullptr; + } + break; + } + } + xdgUserDirsFile.close(); + } + const QStringList templates = qrcTemplates + installedTemplates; // Ensure any changes in the templates dir will call this