[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()) {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.