[frameworks/kio] src/widgets: kfileitemactions: reorder functions for better readability
Antti Savolainen <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 6a23f186a11409ffbea2c889c63d63812ac2777f by Antti Savolainen.
Committed on 10/08/2026 at 13:08.
Pushed by asavolainen into branch 'master'.
kfileitemactions: reorder functions for better readability
When debugging this code I was moving back and forth between long
stretches of code. This should make it more pleasant so that code is
close to where it is being called
M +122 -122 src/widgets/kfileitemactions.cpp
https://invent.kde.org/frameworks/kio/-/commit/6a23f186a11409ffbea2c889c63d63812ac2777f
diff --git a/src/widgets/kfileitemactions.cpp b/src/widgets/kfileitemactions.cpp
index 662abd7907..23371283cf 100644
--- a/src/widgets/kfileitemactions.cpp
+++ b/src/widgets/kfileitemactions.cpp
@@ -365,6 +365,128 @@ void KFileItemActions::insertOpenWithActionsTo(QAction *before, QMenu *topMenu,
d->insertOpenWithActionsTo(before, topMenu, excludedDesktopEntryNames);
}
+void KFileItemActionsPrivate::addServiceActionsTo(QMenu *mainMenuHolder,
+ QMenu *actionsMenuHolder,
+ const QList<QAction *> &additionalActions,
+ const QStringList &excludeList)
+{
+ const KFileItemList items = m_props.items();
+ const KFileItem &firstItem = items.first();
+ const QString protocol = firstItem.url().scheme(); // assumed to be the same for all items
+ const bool isLocal = !firstItem.localPath().isEmpty();
+
+ KIO::PopupServices s;
+
+ // 2 - Look for "servicemenus" bindings (user-defined services)
+
+ // first check the .directory if this is a directory
+ const bool isSingleLocal = items.count() == 1 && isLocal;
+ if (m_props.isDirectory() && isSingleLocal) {
+ const QString dotDirectoryFile = QUrl::fromLocalFile(firstItem.localPath()).path().append(QLatin1String("/.directory"));
+ if (QFile::exists(dotDirectoryFile)) {
+ const KDesktopFile desktopFile(dotDirectoryFile);
+ const KConfigGroup cfg = desktopFile.desktopGroup();
+
+ if (KIOSKAuthorizedAction(cfg)) {
+ const QString priority = cfg.readEntry("X-KDE-Priority");
+ const QString submenuName = cfg.readEntry("X-KDE-Submenu");
+ ServiceList &list = s.selectList(priority, submenuName);
+ list += desktopFile.actions();
+ }
+ }
+ }
+
+ const KConfigGroup showGroup = m_config.group(QStringLiteral("Show"));
+
+ const QStringList files = serviceMenuFilePaths();
+ for (const QString &file : files) {
+ const KDesktopFile desktopFile(file);
+ const KConfigGroup cfg = desktopFile.desktopGroup();
+ if (!shouldDisplayServiceMenu(cfg, protocol)) {
+ continue;
+ }
+
+ const QList<KDesktopFileAction> actions = desktopFile.actions();
+ if (!actions.isEmpty()) {
+ if (!checkTypesMatch(cfg)) {
+ continue;
+ }
+
+ const QString priority = cfg.readEntry("X-KDE-Priority");
+ const QString submenuName = cfg.readEntry("X-KDE-Submenu");
+
+ ServiceList &list = s.selectList(priority, submenuName);
+ std::copy_if(actions.cbegin(), actions.cend(), std::back_inserter(list), [&excludeList, &showGroup](const KDesktopFileAction &srvAction) {
+ return showGroup.readEntry(srvAction.actionsKey(), true) && !excludeList.contains(srvAction.actionsKey());
+ });
+ }
+ }
+
+ for (QAction *action : additionalActions) {
+ actionsMenuHolder->addAction(action);
+ }
+ insertServicesSubmenus(s.userPrioritySubmenus, actionsMenuHolder);
+ insertServices(s.userPriority, actionsMenuHolder);
+ insertServicesSubmenus(s.userSubmenus, actionsMenuHolder);
+ insertServices(s.user, actionsMenuHolder);
+
+ insertServicesSubmenus(s.userToplevelSubmenus, mainMenuHolder);
+ insertServices(s.userToplevel, mainMenuHolder);
+}
+
+void KFileItemActionsPrivate::addPluginActionsTo(QMenu *mainMenuHolder, QMenu *actionsMenuHolder, const QStringList &excludeList)
+{
+ QString commonMimeType = m_props.mimeType();
+ if (commonMimeType.isEmpty() && m_props.isFile()) {
+ commonMimeType = QStringLiteral("application/octet-stream");
+ }
+
+ const KConfigGroup showGroup = m_config.group(QStringLiteral("Show"));
+
+ const QMimeDatabase db;
+ const auto jsonPlugins = KPluginMetaData::findPlugins(QStringLiteral("kf6/kfileitemaction"), [&db, commonMimeType](const KPluginMetaData &metaData) {
+ auto mimeType = db.mimeTypeForName(commonMimeType);
+ const QStringList list = metaData.mimeTypes();
+ return std::any_of(list.constBegin(), list.constEnd(), [mimeType](const QString &supportedMimeType) {
+ return mimeType.inherits(supportedMimeType);
+ });
+ });
+
+ QList<QAction *> iconAction;
+ for (const auto &jsonMetadata : jsonPlugins) {
+ // The plugin has been disabled
+ const QString pluginId = jsonMetadata.pluginId();
+ if (!showGroup.readEntry(pluginId, true) || excludeList.contains(pluginId)) {
+ continue;
+ }
+
+ KAbstractFileItemActionPlugin *abstractPlugin = m_loadedPlugins.value(pluginId);
+ if (!abstractPlugin) {
+ auto result = KPluginFactory::instantiatePlugin<KAbstractFileItemActionPlugin>(jsonMetadata, this);
+ if (result) {
+ abstractPlugin = result.plugin;
+ m_loadedPlugins.insert(pluginId, abstractPlugin);
+ } else {
+ qCWarning(KIO_WIDGETS) << "Couldn't load plugin:" << pluginId << result.errorText << result.errorReason;
+ }
+ }
+ if (abstractPlugin) {
+ connect(abstractPlugin, &KAbstractFileItemActionPlugin::error, q, &KFileItemActions::error);
+ const QList<QAction *> actions = abstractPlugin->actions(m_props, m_parentWidget);
+ if (jsonMetadata.value(QStringLiteral("X-KDE-Show-In-Submenu"), false)) {
+ if (pluginId == QLatin1String("setfoldericonitemaction")) {
+ iconAction = actions;
+ } else {
+ actionsMenuHolder->addActions(actions);
+ }
+ } else {
+ mainMenuHolder->addActions(actions);
+ }
+ }
+ }
+ actionsMenuHolder->addActions(iconAction);
+}
+
void KFileItemActionsPrivate::slotRunPreferredApplications()
{
const KFileItemList fileItems = m_fileOpenList;
@@ -545,128 +667,6 @@ bool KFileItemActionsPrivate::checkTypesMatch(const KConfigGroup &cfg) const
});
}
-void KFileItemActionsPrivate::addServiceActionsTo(QMenu *mainMenuHolder,
- QMenu *actionsMenuHolder,
- const QList<QAction *> &additionalActions,
- const QStringList &excludeList)
-{
- const KFileItemList items = m_props.items();
- const KFileItem &firstItem = items.first();
- const QString protocol = firstItem.url().scheme(); // assumed to be the same for all items
- const bool isLocal = !firstItem.localPath().isEmpty();
-
- KIO::PopupServices s;
-
- // 2 - Look for "servicemenus" bindings (user-defined services)
-
- // first check the .directory if this is a directory
- const bool isSingleLocal = items.count() == 1 && isLocal;
- if (m_props.isDirectory() && isSingleLocal) {
- const QString dotDirectoryFile = QUrl::fromLocalFile(firstItem.localPath()).path().append(QLatin1String("/.directory"));
- if (QFile::exists(dotDirectoryFile)) {
- const KDesktopFile desktopFile(dotDirectoryFile);
- const KConfigGroup cfg = desktopFile.desktopGroup();
-
- if (KIOSKAuthorizedAction(cfg)) {
- const QString priority = cfg.readEntry("X-KDE-Priority");
- const QString submenuName = cfg.readEntry("X-KDE-Submenu");
- ServiceList &list = s.selectList(priority, submenuName);
- list += desktopFile.actions();
- }
- }
- }
-
- const KConfigGroup showGroup = m_config.group(QStringLiteral("Show"));
-
- const QStringList files = serviceMenuFilePaths();
- for (const QString &file : files) {
- const KDesktopFile desktopFile(file);
- const KConfigGroup cfg = desktopFile.desktopGroup();
- if (!shouldDisplayServiceMenu(cfg, protocol)) {
- continue;
- }
-
- const QList<KDesktopFileAction> actions = desktopFile.actions();
- if (!actions.isEmpty()) {
- if (!checkTypesMatch(cfg)) {
- continue;
- }
-
- const QString priority = cfg.readEntry("X-KDE-Priority");
- const QString submenuName = cfg.readEntry("X-KDE-Submenu");
-
- ServiceList &list = s.selectList(priority, submenuName);
- std::copy_if(actions.cbegin(), actions.cend(), std::back_inserter(list), [&excludeList, &showGroup](const KDesktopFileAction &srvAction) {
- return showGroup.readEntry(srvAction.actionsKey(), true) && !excludeList.contains(srvAction.actionsKey());
- });
- }
- }
-
- for (QAction *action : additionalActions) {
- actionsMenuHolder->addAction(action);
- }
- insertServicesSubmenus(s.userPrioritySubmenus, actionsMenuHolder);
- insertServices(s.userPriority, actionsMenuHolder);
- insertServicesSubmenus(s.userSubmenus, actionsMenuHolder);
- insertServices(s.user, actionsMenuHolder);
-
- insertServicesSubmenus(s.userToplevelSubmenus, mainMenuHolder);
- insertServices(s.userToplevel, mainMenuHolder);
-}
-
-void KFileItemActionsPrivate::addPluginActionsTo(QMenu *mainMenuHolder, QMenu *actionsMenuHolder, const QStringList &excludeList)
-{
- QString commonMimeType = m_props.mimeType();
- if (commonMimeType.isEmpty() && m_props.isFile()) {
- commonMimeType = QStringLiteral("application/octet-stream");
- }
-
- const KConfigGroup showGroup = m_config.group(QStringLiteral("Show"));
-
- const QMimeDatabase db;
- const auto jsonPlugins = KPluginMetaData::findPlugins(QStringLiteral("kf6/kfileitemaction"), [&db, commonMimeType](const KPluginMetaData &metaData) {
- auto mimeType = db.mimeTypeForName(commonMimeType);
- const QStringList list = metaData.mimeTypes();
- return std::any_of(list.constBegin(), list.constEnd(), [mimeType](const QString &supportedMimeType) {
- return mimeType.inherits(supportedMimeType);
- });
- });
-
- QList<QAction *> iconAction;
- for (const auto &jsonMetadata : jsonPlugins) {
- // The plugin has been disabled
- const QString pluginId = jsonMetadata.pluginId();
- if (!showGroup.readEntry(pluginId, true) || excludeList.contains(pluginId)) {
- continue;
- }
-
- KAbstractFileItemActionPlugin *abstractPlugin = m_loadedPlugins.value(pluginId);
- if (!abstractPlugin) {
- auto result = KPluginFactory::instantiatePlugin<KAbstractFileItemActionPlugin>(jsonMetadata, this);
- if (result) {
- abstractPlugin = result.plugin;
- m_loadedPlugins.insert(pluginId, abstractPlugin);
- } else {
- qCWarning(KIO_WIDGETS) << "Couldn't load plugin:" << pluginId << result.errorText << result.errorReason;
- }
- }
- if (abstractPlugin) {
- connect(abstractPlugin, &KAbstractFileItemActionPlugin::error, q, &KFileItemActions::error);
- const QList<QAction *> actions = abstractPlugin->actions(m_props, m_parentWidget);
- if (jsonMetadata.value(QStringLiteral("X-KDE-Show-In-Submenu"), false)) {
- if (pluginId == QLatin1String("setfoldericonitemaction")) {
- iconAction = actions;
- } else {
- actionsMenuHolder->addActions(actions);
- }
- } else {
- mainMenuHolder->addActions(actions);
- }
- }
- }
- actionsMenuHolder->addActions(iconAction);
-}
-
KService::List KFileItemActionsPrivate::associatedApplications(const QStringList &mimeTypeList, const QStringList &excludedDesktopEntryNames)
{
if (!KAuthorized::authorizeAction(QStringLiteral("openwith")) || mimeTypeList.isEmpty()) {