diff options
| author | Elvis Angelaccio <[email protected]> | 2016-06-08 15:30:52 +0200 |
|---|---|---|
| committer | Elvis Angelaccio <[email protected]> | 2016-06-08 15:30:52 +0200 |
| commit | d48b73349241a46ad70cac5a5ce3e11f641650af (patch) | |
| tree | baa2ce535290aa283aac4bfd898905fd7b380ad8 /src/dolphincontextmenu.cpp | |
| parent | 29f12d91e5d98f5f2bc671960c990515e3703fbb (diff) | |
Load KFileItemAction plugins with json metadata
REVIEW: 128088
Diffstat (limited to 'src/dolphincontextmenu.cpp')
| -rw-r--r-- | src/dolphincontextmenu.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp index dfec76144..823c9340f 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> @@ -503,6 +504,7 @@ void DolphinContextMenu::addFileItemPluginActions() 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 +515,30 @@ void DolphinContextMenu::addFileItemPluginActions() if (abstractPlugin) { abstractPlugin->setParent(this); addActions(abstractPlugin->actions(props, m_mainWindow)); + addedPlugins << service->desktopEntryName(); + } + } + + const auto jsonPlugins = KPluginLoader::findPlugins(QString(), [](const KPluginMetaData& metaData) { + return metaData.serviceTypes().contains(QStringLiteral("KFileItemAction/Plugin")); + }); + + 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)); } } } |
