Commit
d48b733 introduced support for kfileitemaction plugins with json
metadata, but forgot to filter them by the commonMimeType (like
KMimeTypeTrader::query() does with old-style plugins).
So we need to load a plugin only when commonMimeType is equal to (or child of) one
of the mimetypes supported by the plugin.
#include <QKeyEvent>
#include <QMenuBar>
#include <QMenu>
#include <QKeyEvent>
#include <QMenuBar>
#include <QMenu>
+#include <QMimeDatabase>
#include <panels/places/placesitem.h>
#include <panels/places/placesitemmodel.h>
#include <panels/places/placesitem.h>
#include <panels/places/placesitemmodel.h>
- const auto jsonPlugins = KPluginLoader::findPlugins(QStringLiteral("kf5/kfileitemaction"), [](const KPluginMetaData& metaData) {
- return metaData.serviceTypes().contains(QStringLiteral("KFileItemAction/Plugin"));
+ const auto jsonPlugins = KPluginLoader::findPlugins(QStringLiteral("kf5/kfileitemaction"), [=](const KPluginMetaData& metaData) {
+ if (!metaData.serviceTypes().contains(QStringLiteral("KFileItemAction/Plugin"))) {
+ return false;
+ }
+
+ auto mimeType = QMimeDatabase().mimeTypeForName(commonMimeType);
+ foreach (const auto& supportedMimeType, metaData.mimeTypes()) {
+ if (mimeType.inherits(supportedMimeType)) {
+ return true;
+ }
+ }
+
+ return false;
});
foreach (const auto& jsonMetadata, jsonPlugins) {
});
foreach (const auto& jsonMetadata, jsonPlugins) {