X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/5593c252e8d9638c86dcc2bb9edd394ea14f8ba1..b706108206be1c9e777e1ace02aa99247fdfc3ca:/src/dolphincontextmenu.cpp diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp index dfec76144..9507ba0a8 100644 --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -47,6 +48,7 @@ #include #include #include +#include #include #include @@ -503,6 +505,7 @@ void DolphinContextMenu::addFileItemPluginActions() const KConfig config(QStringLiteral("kservicemenurc"), KConfig::NoGlobals); const KConfigGroup showGroup = config.group("Show"); + QSet addedPlugins; foreach (const KService::Ptr& service, pluginServices) { if (!showGroup.readEntry(service->desktopEntryName(), true)) { // The plugin has been disabled @@ -510,6 +513,41 @@ void DolphinContextMenu::addFileItemPluginActions() } KAbstractFileItemActionPlugin* abstractPlugin = service->createInstance(); + if (abstractPlugin) { + abstractPlugin->setParent(this); + addActions(abstractPlugin->actions(props, m_mainWindow)); + addedPlugins << service->desktopEntryName(); + } + } + + 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) { + // The plugin has been disabled + if (!showGroup.readEntry(jsonMetadata.pluginId(), true)) { + continue; + } + + // The plugin also has a .desktop file and has already been added. + if (addedPlugins.contains(jsonMetadata.pluginId())) { + continue; + } + + KPluginFactory *factory = KPluginLoader(jsonMetadata.fileName()).factory(); + KAbstractFileItemActionPlugin* abstractPlugin = factory->create(); if (abstractPlugin) { abstractPlugin->setParent(this); addActions(abstractPlugin->actions(props, m_mainWindow));