diff --git a/src/alternativesmodel.cpp b/src/alternativesmodel.cpp --- a/src/alternativesmodel.cpp +++ b/src/alternativesmodel.cpp @@ -276,6 +276,7 @@ static QVector findScriptedPackages(std::function filter) { QVector ret; + QSet addedPlugins; const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("kpackage/Purpose"), QStandardPaths::LocateDirectory); foreach(const QString &dir, dirs) { QDirIterator dirIt(dir, QDir::Dirs | QDir::NoDotAndDotDot); @@ -287,7 +288,8 @@ continue; const KPluginMetaData info = Purpose::createMetaData(dir.absoluteFilePath(QStringLiteral("metadata.json"))); - if (filter(info)) { + if (!addedPlugins.contains(info.pluginId()) && filter(info)) { + addedPlugins << info.pluginId(); ret += info; } } @@ -319,7 +321,14 @@ }; beginResetModel(); - d->m_plugins = KPluginLoader::findPlugins(QStringLiteral("kf5/purpose"), pluginAcceptable); + const auto plugins = KPluginLoader::findPlugins(QStringLiteral("kf5/purpose")); + QSet addedPlugins; + for (const auto &metaData : plugins) { + if (!addedPlugins.contains(metaData.pluginId()) && pluginAcceptable(metaData)) { + addedPlugins << metaData.pluginId(); + d->m_plugins << metaData; + } + } d->m_plugins += findScriptedPackages(pluginAcceptable); endResetModel(); }