diff --git a/src/grantleetheme.h b/src/grantleetheme.h --- a/src/grantleetheme.h +++ b/src/grantleetheme.h @@ -54,6 +54,8 @@ Q_REQUIRED_RESULT QString author() const; Q_REQUIRED_RESULT QString authorEmail() const; + void addThemePath(const QString &path); + Q_REQUIRED_RESULT QString render(const QString &templateName, const QVariantHash &data, const QByteArray &applicationDomain = QByteArray()); static void addPluginPath(const QString &path); diff --git a/src/grantleetheme.cpp b/src/grantleetheme.cpp --- a/src/grantleetheme.cpp +++ b/src/grantleetheme.cpp @@ -47,7 +47,7 @@ , description(other.description) , name(other.name) , dirName(other.dirName) - , absolutePath(other.absolutePath) + , absolutePaths(other.absolutePaths) , author(other.author) , email(other.email) , loader(other.loader) @@ -66,11 +66,16 @@ void ThemePrivate::setupLoader() { // Get the parent dir with themes, we set the theme directory separately - QDir dir(absolutePath); - dir.cdUp(); + + QStringList templatePaths; + for (const QString &absolutePath : qAsConst(absolutePaths)) { + QDir dir(absolutePath); + dir.cdUp(); + templatePaths << dir.absolutePath(); + } loader = QSharedPointer::create(); - loader->setTemplateDirs({ dir.absolutePath() }); + loader->setTemplateDirs(templatePaths); loader->setTheme(dirName); if (!sEngine) { @@ -122,7 +127,7 @@ KConfigGroup group(&config, QStringLiteral("Desktop Entry")); if (group.isValid()) { d->dirName = dirName; - d->absolutePath = themePath; + d->absolutePaths.append(themePath); d->name = group.readEntry("Name", QString()); d->description = group.readEntry("Description", QString()); d->themeFileName = group.readEntry("FileName", QString()); @@ -141,7 +146,7 @@ bool Theme::operator==(const Theme &other) const { - return isValid() && other.isValid() && d->absolutePath == other.absolutePath(); + return isValid() && other.isValid() && d->absolutePaths == other.d->absolutePaths; } Theme &Theme::operator=(const Theme &other) @@ -185,7 +190,7 @@ QString Theme::absolutePath() const { - return d->absolutePath; + return d->absolutePaths.at(0); // #### } QString Theme::author() const @@ -198,15 +203,20 @@ return d->email; } +void Theme::addThemePath(const QString &path) +{ + d->absolutePaths.append(path); +} + QString Theme::render(const QString &templateName, const QVariantHash &data, const QByteArray &applicationDomain) { if (!d->loader) { d->setupLoader(); } Q_ASSERT(d->loader); if (!d->loader->canLoadTemplate(templateName)) { - qCWarning(GRANTLEETHEME_LOG) << "Cannot load template" << templateName << ", please check your installation"; + qCWarning(GRANTLEETHEME_LOG) << "Cannot load template" << templateName << ", please check your installation. Tried in these dirs:" << d->loader->templateDirs(); return QString(); } diff --git a/src/grantleetheme_p.h b/src/grantleetheme_p.h --- a/src/grantleetheme_p.h +++ b/src/grantleetheme_p.h @@ -44,7 +44,7 @@ QString description; QString name; QString dirName; - QString absolutePath; + QStringList absolutePaths; QString author; QString email; diff --git a/src/grantleethememanager.cpp b/src/grantleethememanager.cpp --- a/src/grantleethememanager.cpp +++ b/src/grantleethememanager.cpp @@ -143,8 +143,12 @@ theme.d->name = themeName; } alreadyLoadedThemeName << themeName; - themes.insert(dirName, theme); - //qDebug()<<" theme.name()"<addDir(directory);