]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/settings/contextmenu/contextmenusettingspage.cpp
Merge branch 'release/22.04'
[dolphin.git] / src / settings / contextmenu / contextmenusettingspage.cpp
index 34934bb877b7ed90349a8eb4c5f2e436c3214df8..cec1f96491d4c6039fc03e7ac0dc845c2b34896a 100644 (file)
 #include "dolphin_contextmenusettings.h"
 #include "settings/serviceitemdelegate.h"
 #include "settings/servicemodel.h"
+#include "global.h"
 
 #include <KDesktopFile>
+#include <KDesktopFileActions>
+#include <KFileUtils>
 #include <KLocalizedString>
 #include <KMessageBox>
 #include <KNS3/Button>
 #include <KPluginMetaData>
 #include <KService>
 #include <KServiceTypeTrader>
-#include <KDesktopFileActions>
 
 #include <kio_version.h>
 
@@ -30,6 +32,7 @@
 #include <QShowEvent>
 #include <QSortFilterProxyModel>
 #include <QLineEdit>
+#include <QApplication>
 
 namespace
 {
@@ -37,6 +40,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,
@@ -192,11 +197,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;
+            }
+        }
     }
 }
 
@@ -235,11 +250,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));
+                }
             }
         }
 
@@ -256,10 +273,14 @@ void ContextMenuSettingsPage::loadServices()
     const KConfigGroup showGroup = config.group("Show");
 
     // Load generic services
-    const KService::List entries = KServiceTypeTrader::self()->query(QStringLiteral("KonqPopupMenu/Plugin"));
-    for (const KService::Ptr &service : entries) {
-        const QString file = QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kservices5/" % service->entryPath());
-        const QList<KServiceAction> serviceActions = KDesktopFileActions::userDefinedServices(file, true);
+    const auto locations = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("kio/servicemenus"), QStandardPaths::LocateDirectory);
+    QStringList files = KFileUtils::findAllUniqueFiles(locations);
+    const KService::List services = KServiceTypeTrader::self()->query(QStringLiteral("KonqPopupMenu/Plugin"));
+    for (const KService::Ptr &service : services) {
+        files << QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kservices5/" % service->entryPath());
+    }
+    for (const auto &file : qAsConst(files)) {
+        const QList<KServiceAction> serviceActions = KDesktopFileActions::userDefinedServices(KService(file), true);
 
         const KDesktopFile desktopFile(file);
         const QString subMenuName = desktopFile.desktopGroup().readEntry("X-KDE-Submenu");
@@ -291,7 +312,7 @@ void ContextMenuSettingsPage::loadServices()
 #endif
 
     // Load JSON-based plugins that implement the KFileItemActionPlugin interface
-    const auto jsonPlugins = KPluginLoader::findPlugins(QStringLiteral("kf5/kfileitemaction"));
+    const auto jsonPlugins = KPluginMetaData::findPlugins(QStringLiteral("kf5/kfileitemaction"));
 
     for (const auto &jsonMetadata : jsonPlugins) {
         const QString desktopEntryName = jsonMetadata.pluginId();
@@ -312,7 +333,7 @@ void ContextMenuSettingsPage::loadVersionControlSystems()
     // Create a checkbox for each available version control plugin
     QSet<QString> loadedPlugins;
 
-    const QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins(QStringLiteral("dolphin/vcs"));
+    const QVector<KPluginMetaData> plugins = KPluginMetaData::findPlugins(QStringLiteral("dolphin/vcs"));
     for (const auto &plugin : plugins) {
         const QString pluginName = plugin.name();
         addRow(QStringLiteral("code-class"),
@@ -322,18 +343,6 @@ void ContextMenuSettingsPage::loadVersionControlSystems()
         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,
-               enabledPlugins.contains(pluginName));
-    }
-
     m_sortModel->sort(Qt::DisplayRole);
 }