From 809ba746952c9768de0163153215d95bd233f5c6 Mon Sep 17 00:00:00 2001 From: Elvis Angelaccio Date: Tue, 23 Aug 2016 17:58:48 +0200 Subject: [PATCH] Filter json-only KFileItemAction plugins by mimetype 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. --- src/dolphincontextmenu.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp index ff2e5478a4..9507ba0a8d 100644 --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #include #include @@ -519,8 +520,19 @@ void DolphinContextMenu::addFileItemPluginActions() } } - 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) {