]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Avoid searching for the knetattach service on startup
authorFelix Ernst <felixernst@kde.org>
Fri, 23 Feb 2024 09:45:53 +0000 (09:45 +0000)
committerFelix Ernst <felixernst@kde.org>
Fri, 23 Feb 2024 09:45:53 +0000 (09:45 +0000)
The installed services might change while Dolphin is running, so it is
better to only search when they are actually needed instead.

The very first time such a search happens (e.g. after updating the
system), is also somewhat slow, which could slow down the very first
Dolphin startup.

This commit might also produce a very slight general startup speed
improvement. However, the measured change is within the margin of
error.

src/dolphinnavigatorswidgetaction.cpp

index 865c493bcbcdfbc89c8cf82e1da274b369097d85..f45589dbb26608232a986de0be7c28e5685b9f9b 100644 (file)
@@ -253,8 +253,8 @@ QPushButton *DolphinNavigatorsWidgetAction::newNetworkFolderButton(const Dolphin
 {
     auto networkFolderButton = new QPushButton(QIcon::fromTheme(QStringLiteral("folder-add")), i18nc("@action:button", "Add Network Folder"), parent);
     networkFolderButton->setFlat(true);
-    KService::Ptr service = KService::serviceByDesktopName(QStringLiteral("org.kde.knetattach"));
-    connect(networkFolderButton, &QPushButton::clicked, this, [networkFolderButton, service]() {
+    connect(networkFolderButton, &QPushButton::clicked, this, [networkFolderButton]() {
+        const KService::Ptr service = KService::serviceByDesktopName(QStringLiteral("org.kde.knetattach"));
         auto *job = new KIO::ApplicationLauncherJob(service, networkFolderButton);
         auto *delegate = new KNotificationJobUiDelegate;
         delegate->setAutoErrorHandlingEnabled(true);
@@ -262,8 +262,14 @@ QPushButton *DolphinNavigatorsWidgetAction::newNetworkFolderButton(const Dolphin
         job->start();
     });
     networkFolderButton->hide();
-    connect(urlNavigator, &KUrlNavigator::urlChanged, this, [networkFolderButton, urlNavigator, service]() {
-        networkFolderButton->setVisible(service && urlNavigator->locationUrl().scheme() == QLatin1String("remote"));
+    connect(urlNavigator, &KUrlNavigator::urlChanged, this, [networkFolderButton, urlNavigator]() {
+        if (urlNavigator->locationUrl().scheme() == QLatin1String("remote")) {
+            // Looking up a service can be a bit slow, so we only do it now when it becomes necessary.
+            const KService::Ptr service = KService::serviceByDesktopName(QStringLiteral("org.kde.knetattach"));
+            networkFolderButton->setVisible(service);
+        } else {
+            networkFolderButton->setVisible(false);
+        }
     });
     return networkFolderButton;
 }