X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/de8ea90ca78ccfb26dd501dc3bc089fb24ad9094..579b38050d0ac86a23465bbaba796e1c9bb25619:/src/settings/contextmenu/contextmenusettingspage.cpp diff --git a/src/settings/contextmenu/contextmenusettingspage.cpp b/src/settings/contextmenu/contextmenusettingspage.cpp index 0723fee2e..fa4ba11a7 100644 --- a/src/settings/contextmenu/contextmenusettingspage.cpp +++ b/src/settings/contextmenu/contextmenusettingspage.cpp @@ -11,15 +11,22 @@ #include "dolphin_contextmenusettings.h" #include "settings/serviceitemdelegate.h" #include "settings/servicemodel.h" +#include "global.h" #include +#include +#include #include #include -#include #include #include #include -#include +#include +#include +#include + +#include +#include #include #include @@ -28,6 +35,7 @@ #include #include #include +#include namespace { @@ -35,6 +43,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, @@ -77,25 +87,23 @@ ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget* parent, m_listView->setVerticalScrollMode(QListView::ScrollPerPixel); connect(m_listView, &QListView::clicked, this, &ContextMenuSettingsPage::changed); + topLayout->addWidget(label); + topLayout->addWidget(m_searchLineEdit); + topLayout->addWidget(m_listView); + #ifndef Q_OS_WIN - auto *downloadButton = new KNS3::Button(i18nc("@action:button", "Download New Services..."), - QStringLiteral("servicemenu.knsrc"), - this); - connect(downloadButton, &KNS3::Button::dialogFinished, this, [this](const KNS3::Entry::List &changedEntries) { + using NewStuffButton = KNSWidgets::Button; + auto *downloadButton = new NewStuffButton(i18nc("@action:button", "Download New Services..."), + QStringLiteral("servicemenu.knsrc"), + this); + connect(downloadButton, &NewStuffButton::dialogFinished, this, [this](const auto &changedEntries) { if (!changedEntries.isEmpty()) { m_serviceModel->clear(); loadServices(); } }); - -#endif - - topLayout->addWidget(label); - topLayout->addWidget(m_searchLineEdit); - topLayout->addWidget(m_listView); -#ifndef Q_OS_WIN topLayout->addWidget(downloadButton); -#endif +#endif // Q_OS_WIN m_enabledVcsPlugins = VersionControlSettings::enabledPlugins(); std::sort(m_enabledVcsPlugins.begin(), m_enabledVcsPlugins.end()); @@ -120,6 +128,8 @@ bool ContextMenuSettingsPage::entryVisible(const QString& id) return ContextMenuSettings::showCopyLocation(); } else if (id == "duplicate") { return ContextMenuSettings::showDuplicateHere(); + } else if (id == "open_terminal_here") { + return ContextMenuSettings::showOpenTerminal(); } return false; } @@ -140,6 +150,8 @@ void ContextMenuSettingsPage::setEntryVisible(const QString& id, bool visible) ContextMenuSettings::setShowCopyLocation(visible); } else if (id == "duplicate") { ContextMenuSettings::setShowDuplicateHere(visible); + } else if (id == "open_terminal_here") { + ContextMenuSettings::setShowOpenTerminal(visible); } } @@ -186,11 +198,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 +251,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)); + } } } @@ -250,10 +274,18 @@ 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 serviceActions = KDesktopFileActions::userDefinedServices(file, true); + const auto locations = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("kio/servicemenus"), QStandardPaths::LocateDirectory); + QStringList files = KFileUtils::findAllUniqueFiles(locations); + +#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 90) + const KService::List services = KServiceTypeTrader::self()->query(QStringLiteral("KonqPopupMenu/Plugin")); + for (const KService::Ptr &service : services) { + files << QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kservices5/" % service->entryPath()); + } +#endif + + for (const auto &file : qAsConst(files)) { + const QList serviceActions = KDesktopFileActions::userDefinedServices(KService(file), true); const KDesktopFile desktopFile(file); const QString subMenuName = desktopFile.desktopGroup().readEntry("X-KDE-Submenu"); @@ -272,7 +304,8 @@ void ContextMenuSettingsPage::loadServices() } } - // Load service plugins that implement the KFileItemActionPlugin interface + // Load service plugins, this is deprecated in KIO 5.82 +#if KIOCORE_BUILD_DEPRECATED_SINCE(5, 82) const KService::List pluginServices = KServiceTypeTrader::self()->query(QStringLiteral("KFileItemAction/Plugin")); for (const KService::Ptr &service : pluginServices) { const QString desktopEntryName = service->desktopEntryName(); @@ -281,11 +314,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,13 +336,16 @@ void ContextMenuSettingsPage::loadVersionControlSystems() const QStringList enabledPlugins = VersionControlSettings::enabledPlugins(); // Create a checkbox for each available version control plugin - const KService::List pluginServices = KServiceTypeTrader::self()->query(QStringLiteral("FileViewVersionControlPlugin")); - for (const auto &plugin : pluginServices) { - const QString pluginName = plugin->name(); + QSet loadedPlugins; + + const QVector 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; } m_sortModel->sort(Qt::DisplayRole);