]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/settings/contextmenu/contextmenusettingspage.cpp
Port away from deprecated KPluginLoader
[dolphin.git] / src / settings / contextmenu / contextmenusettingspage.cpp
index 0723fee2ec52a2e282ebfeda9280c825c51fec2f..0541b1020658d8098a27595175c49010d8282b4f 100644 (file)
@@ -11,6 +11,7 @@
 #include "dolphin_contextmenusettings.h"
 #include "settings/serviceitemdelegate.h"
 #include "settings/servicemodel.h"
+#include "global.h"
 
 #include <KDesktopFile>
 #include <KLocalizedString>
@@ -21,6 +22,8 @@
 #include <KServiceTypeTrader>
 #include <KDesktopFileActions>
 
+#include <kio_version.h>
+
 #include <QGridLayout>
 #include <QLabel>
 #include <QListWidget>
@@ -28,6 +31,7 @@
 #include <QShowEvent>
 #include <QSortFilterProxyModel>
 #include <QLineEdit>
+#include <QApplication>
 
 namespace
 {
@@ -35,6 +39,8 @@ namespace
     const char VersionControlServicePrefix[] = "_version_control_";
     const char DeleteService[] = "_delete";
     const char CopyToMoveToService[] ="_copy_to_move_to";
+
+    bool laterSelected = false;
 }
 
 ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget* parent,
@@ -120,6 +126,8 @@ bool ContextMenuSettingsPage::entryVisible(const QString& id)
         return ContextMenuSettings::showCopyLocation();
     } else if (id == "duplicate") {
         return ContextMenuSettings::showDuplicateHere();
+    } else if (id == "open_terminal") {
+        return ContextMenuSettings::showOpenTerminal();
     }
     return false;
 }
@@ -140,6 +148,8 @@ void ContextMenuSettingsPage::setEntryVisible(const QString& id, bool visible)
         ContextMenuSettings::setShowCopyLocation(visible);
     } else if (id == "duplicate") {
         ContextMenuSettings::setShowDuplicateHere(visible);
+    } else if (id == "open_terminal") {
+        ContextMenuSettings::setShowOpenTerminal(visible);
     }
 }
 
@@ -186,11 +196,21 @@ void ContextMenuSettingsPage::applySettings()
         VersionControlSettings::setEnabledPlugins(enabledPlugins);
         VersionControlSettings::self()->save();
 
-        KMessageBox::information(window(),
-                                 i18nc("@info", "Dolphin must be restarted to apply the "
-                                                "updated version control systems settings."),
-                                 QString(), // default title
-                                 QStringLiteral("ShowVcsRestartInformation"));
+        if (!laterSelected) {
+            KMessageBox::ButtonCode promptRestart = KMessageBox::questionYesNo(window(),
+                                    i18nc("@info", "Dolphin must be restarted to apply the "
+                                                "updated version control system settings."),
+                                    i18nc("@info", "Restart now?"),
+                                    KGuiItem(QApplication::translate("KStandardGuiItem", "&Restart"), QStringLiteral("dialog-restart")),
+                                    KGuiItem(QApplication::translate("KStandardGuiItem", "&Later"), QStringLiteral("dialog-later"))
+                        );
+            if (promptRestart == KMessageBox::ButtonCode::Yes) {
+                Dolphin::openNewWindow();
+                qApp->quit();
+            } else {
+                laterSelected = true;
+            }
+        }
     }
 }
 
@@ -229,11 +249,13 @@ void ContextMenuSettingsPage::showEvent(QShowEvent* event)
                CopyToMoveToService,
                ContextMenuSettings::showCopyMoveMenu());
 
-        // Add other built-in actions
-        for (const QString& id : m_actionIds) {
-            const QAction* action = m_actions->action(id);
-            if (action) {
-                addRow(action->icon().name(), action->text(), id, entryVisible(id));
+        if (m_actions){
+            // Add other built-in actions
+            for (const QString& id : m_actionIds) {
+                const QAction* action = m_actions->action(id);
+                if (action) {
+                    addRow(action->icon().name(), action->text(), id, entryVisible(id));
+                }
             }
         }
 
@@ -272,7 +294,8 @@ void ContextMenuSettingsPage::loadServices()
         }
     }
 
-    // Load service plugins that implement the KFileItemActionPlugin interface
+    // Load service plugins, this is deprecated in KIO 5.82
+#if KIO_VERSION < QT_VERSION_CHECK(6, 0, 0)
     const KService::List pluginServices = KServiceTypeTrader::self()->query(QStringLiteral("KFileItemAction/Plugin"));
     for (const KService::Ptr &service : pluginServices) {
         const QString desktopEntryName = service->desktopEntryName();
@@ -281,11 +304,10 @@ void ContextMenuSettingsPage::loadServices()
             addRow(service->icon(), service->name(), desktopEntryName, checked);
         }
     }
+#endif
 
     // Load JSON-based plugins that implement the KFileItemActionPlugin interface
-    const auto jsonPlugins = KPluginLoader::findPlugins(QStringLiteral("kf5/kfileitemaction"), [](const KPluginMetaData& metaData) {
-        return metaData.serviceTypes().contains(QLatin1String("KFileItemAction/Plugin"));
-    });
+    const auto jsonPlugins = KPluginMetaData::findPlugins(QStringLiteral("kf5/kfileitemaction"));
 
     for (const auto &jsonMetadata : jsonPlugins) {
         const QString desktopEntryName = jsonMetadata.pluginId();
@@ -304,9 +326,24 @@ void ContextMenuSettingsPage::loadVersionControlSystems()
     const QStringList enabledPlugins = VersionControlSettings::enabledPlugins();
 
     // Create a checkbox for each available version control plugin
+    QSet<QString> loadedPlugins;
+
+    const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("dolphin/vcs"));
+    for (const auto &plugin : plugins) {
+        const QString pluginName = plugin.name();
+        addRow(QStringLiteral("code-class"),
+               pluginName,
+               VersionControlServicePrefix + pluginName,
+               enabledPlugins.contains(pluginName));
+        loadedPlugins += pluginName;
+    }
+
     const KService::List pluginServices = KServiceTypeTrader::self()->query(QStringLiteral("FileViewVersionControlPlugin"));
     for (const auto &plugin : pluginServices) {
         const QString pluginName = plugin->name();
+        if (loadedPlugins.contains(pluginName)) {
+            continue;
+        }
         addRow(QStringLiteral("code-class"),
                pluginName,
                VersionControlServicePrefix + pluginName,