diff options
Diffstat (limited to 'gnu/packages/patches/grantlee-merge-theme-dirs.patch')
-rw-r--r-- | gnu/packages/patches/grantlee-merge-theme-dirs.patch | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/gnu/packages/patches/grantlee-merge-theme-dirs.patch b/gnu/packages/patches/grantlee-merge-theme-dirs.patch new file mode 100644 index 0000000000..96a15a387b --- /dev/null +++ b/gnu/packages/patches/grantlee-merge-theme-dirs.patch @@ -0,0 +1,163 @@ +Taken from nixpkgs, see +grantleetheme: merge themes across multiple prefixes +<https://github.com/NixOS/nixpkgs/commits/master/pkgs/applications/kde/grantleetheme/grantlee-merge-theme-dirs.patch> + + +diff --git a/src/grantleetheme.cpp b/src/grantleetheme.cpp +index 27d5bc8..8d43140 100644 +--- a/src/grantleetheme.cpp ++++ b/src/grantleetheme.cpp +@@ -46,7 +46,7 @@ ThemePrivate::ThemePrivate(const ThemePrivate &other) + , description(other.description) + , name(other.name) + , dirName(other.dirName) +- , absolutePath(other.absolutePath) ++ , absolutePaths(other.absolutePaths) + , author(other.author) + , email(other.email) + , loader(other.loader) +@@ -64,12 +64,15 @@ void ThemePrivate::setupEngine() + + void ThemePrivate::setupLoader() + { +- // Get the parent dir with themes, we set the theme directory separately +- QDir dir(absolutePath); +- dir.cdUp(); ++ QStringList templateDirs; ++ for (const QString& path : absolutePaths) { ++ QDir dir(path); ++ dir.cdUp(); ++ templateDirs << dir.absolutePath(); ++ } + + loader = QSharedPointer<GrantleeTheme::QtResourceTemplateLoader>::create(); +- loader->setTemplateDirs({ dir.absolutePath() }); ++ loader->setTemplateDirs(templateDirs); + loader->setTheme(dirName); + + if (!sEngine) { +@@ -121,7 +124,7 @@ Theme::Theme(const QString &themePath, const QString &dirName, const QString &de + KConfigGroup group(&config, QStringLiteral("Desktop Entry")); + if (group.isValid()) { + d->dirName = dirName; +- d->absolutePath = themePath; ++ d->absolutePaths = QStringList(themePath); + d->name = group.readEntry("Name", QString()); + d->description = group.readEntry("Description", QString()); + d->themeFileName = group.readEntry("FileName", QString()); +@@ -140,7 +143,7 @@ Theme::~Theme() + + bool Theme::operator==(const Theme &other) const + { +- return isValid() && other.isValid() && d->absolutePath == other.absolutePath(); ++ return isValid() && other.isValid() && d->absolutePaths == other.absolutePaths(); + } + + Theme &Theme::operator=(const Theme &other) +@@ -184,7 +187,15 @@ QString Theme::dirName() const + + QString Theme::absolutePath() const + { +- return d->absolutePath; ++ if (! d->absolutePaths.isEmpty()) { ++ return d->absolutePaths.first(); ++ }; ++ return QString(); ++} ++ ++QStringList Theme::absolutePaths() const ++{ ++ return d->absolutePaths; + } + + QString Theme::author() const +@@ -223,6 +231,13 @@ QString Theme::render(const QString &templateName, const QVariantHash &data, con + return result; + } + ++void Theme::addThemeDir(const QString& path) ++{ ++ QDir dir(path); ++ dir.cdUp(); ++ d->absolutePaths << dir.absolutePath(); ++} ++ + void Theme::addPluginPath(const QString &path) + { + if (!ThemePrivate::sEngine) { +diff --git a/src/grantleetheme.h b/src/grantleetheme.h +index a25c27b..be38299 100644 +--- a/src/grantleetheme.h ++++ b/src/grantleetheme.h +@@ -48,11 +48,14 @@ public: + Q_REQUIRED_RESULT QStringList displayExtraVariables() const; + Q_REQUIRED_RESULT QString dirName() const; + Q_REQUIRED_RESULT QString absolutePath() const; ++ Q_REQUIRED_RESULT QStringList absolutePaths() const; + Q_REQUIRED_RESULT QString author() const; + Q_REQUIRED_RESULT QString authorEmail() const; + + Q_REQUIRED_RESULT QString render(const QString &templateName, const QVariantHash &data, const QByteArray &applicationDomain = QByteArray()); + ++ void addThemeDir(const QString&); ++ + static void addPluginPath(const QString &path); + + private: +diff --git a/src/grantleetheme_p.h b/src/grantleetheme_p.h +index eb73dcb..00510e9 100644 +--- a/src/grantleetheme_p.h ++++ b/src/grantleetheme_p.h +@@ -43,7 +43,7 @@ public: + QString description; + QString name; + QString dirName; +- QString absolutePath; ++ QStringList absolutePaths; + QString author; + QString email; + +diff --git a/src/grantleethememanager.cpp b/src/grantleethememanager.cpp +index 606d717..dc99041 100644 +--- a/src/grantleethememanager.cpp ++++ b/src/grantleethememanager.cpp +@@ -125,25 +125,18 @@ public: + + for (const QString &directory : qAsConst(themesDirectories)) { + QDirIterator dirIt(directory, QStringList(), QDir::AllDirs | QDir::NoDotAndDotDot); +- QStringList alreadyLoadedThemeName; + while (dirIt.hasNext()) { + dirIt.next(); + const QString dirName = dirIt.fileName(); + GrantleeTheme::Theme theme = q->loadTheme(dirIt.filePath(), dirName, defaultDesktopFileName); + if (theme.isValid()) { + QString themeName = theme.name(); +- if (alreadyLoadedThemeName.contains(themeName)) { +- int i = 2; +- const QString originalName(theme.name()); +- while (alreadyLoadedThemeName.contains(themeName)) { +- themeName = originalName + QStringLiteral(" (%1)").arg(i); +- ++i; +- } +- theme.d->name = themeName; ++ QMap<QString, GrantleeTheme::Theme>::iterator i = themes.find(dirName); ++ if (i != themes.end()) { ++ i.value().addThemeDir(dirIt.filePath()); ++ } else { ++ themes.insert(dirName, theme); + } +- alreadyLoadedThemeName << themeName; +- themes.insert(dirName, theme); +- //qDebug()<<" theme.name()"<<theme.name(); + } + } + watch->addDir(directory); +@@ -366,7 +359,7 @@ QString ThemeManager::pathFromThemes(const QString &themesRelativePath, const QS + GrantleeTheme::Theme theme = loadTheme(dirIt.filePath(), dirName, defaultDesktopFileName); + if (theme.isValid()) { + if (dirName == themeName) { +- return theme.absolutePath(); ++ return theme.absolutePaths().first(); + } + } + } |