diff options
| author | arnav dhamija <[email protected]> | 2016-09-25 23:13:22 +0530 |
|---|---|---|
| committer | arnav dhamija <[email protected]> | 2016-09-25 23:13:22 +0530 |
| commit | 67099640b90588af1c72c340756253400da3e95b (patch) | |
| tree | 16fe472cc13677496793c2a4967097e978379ef4 /src/dolphincontextmenu.cpp | |
| parent | ccd0a74eed22c35b5eb72e6f46e747f621169732 (diff) | |
| parent | 1710304e9ba926d2aec4226d00974b826f9bcbc0 (diff) | |
Merge branch 'master' of git.kde.org:dolphin
Diffstat (limited to 'src/dolphincontextmenu.cpp')
| -rw-r--r-- | src/dolphincontextmenu.cpp | 43 |
1 files changed, 39 insertions, 4 deletions
diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp index dfec76144..971ef1e35 100644 --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -37,6 +37,7 @@ #include <KJobWidgets> #include <KMimeTypeTrader> #include <KNewFileMenu> +#include <KPluginMetaData> #include <KService> #include <KLocalizedString> #include <KStandardAction> @@ -47,6 +48,7 @@ #include <QKeyEvent> #include <QMenuBar> #include <QMenu> +#include <QMimeDatabase> #include <panels/places/placesitem.h> #include <panels/places/placesitemmodel.h> @@ -496,13 +498,10 @@ void DolphinContextMenu::addFileItemPluginActions() } const KService::List pluginServices = KMimeTypeTrader::self()->query(commonMimeType, QStringLiteral("KFileItemAction/Plugin"), QStringLiteral("exist Library")); - if (pluginServices.isEmpty()) { - return; - } - const KConfig config(QStringLiteral("kservicemenurc"), KConfig::NoGlobals); const KConfigGroup showGroup = config.group("Show"); + QSet<QString> addedPlugins; foreach (const KService::Ptr& service, pluginServices) { if (!showGroup.readEntry(service->desktopEntryName(), true)) { // The plugin has been disabled @@ -513,6 +512,42 @@ void DolphinContextMenu::addFileItemPluginActions() 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<KAbstractFileItemActionPlugin>(); + if (abstractPlugin) { + abstractPlugin->setParent(this); + addActions(abstractPlugin->actions(props, m_mainWindow)); + addedPlugins << jsonMetadata.pluginId(); } } } |
