]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinnavigatorswidgetaction.cpp
Show button to open knetattach inline with URL nav on remove:// view
[dolphin.git] / src / dolphinnavigatorswidgetaction.cpp
index b8c77c69b1ab7c94a803aeba933b867fe9b954b9..b25c60d0c0b3a23f6f0138454f18fb552e7b8306 100644 (file)
 #include "trash/dolphintrash.h"
 
 #include <KLocalizedString>
+#include <KNotificationJobUiDelegate>
+#include <KService>
 #include <KXMLGUIFactory>
 #include <KXmlGuiWindow>
 
+#include <KIO/ApplicationLauncherJob>
+
 #include <QApplication>
 #include <QDomDocument>
 #include <QHBoxLayout>
@@ -154,7 +158,13 @@ void DolphinNavigatorsWidgetAction::adjustSpacing()
     }
     int trailingSpacing = (m_globalXOfSplitter + m_splitter->width())
                           - (m_globalXOfPrimary + m_widthOfPrimary);
+#if KIO_VERSION < QT_VERSION_CHECK(5, 78, 0)
     if (trailingSpacing < 0 || emptyTrashButton(Primary)->isVisible()) {
+#else
+    if (trailingSpacing < 0 || emptyTrashButton(Primary)->isVisible()
+                            || networkFolderButton(Primary)->isVisible()
+    ) {
+#endif
         trailingSpacing = 0;
     }
     const int widthLeftForUrlNavigator = m_splitter->widget(0)->width() - leadingSpacing - trailingSpacing;
@@ -181,7 +191,13 @@ void DolphinNavigatorsWidgetAction::adjustSpacing()
 
     trailingSpacing = (m_globalXOfSplitter + m_splitter->width())
                       - (m_globalXOfSecondary + m_widthOfSecondary);
+#if KIO_VERSION < QT_VERSION_CHECK(5, 78, 0)
     if (trailingSpacing < 0 || emptyTrashButton(Secondary)->isVisible()) {
+#else
+    if (trailingSpacing < 0 || emptyTrashButton(Secondary)->isVisible()
+                            || networkFolderButton(Secondary)->isVisible()
+    ) {
+#endif
         trailingSpacing = 0;
     } else {
         const int widthLeftForUrlNavigator2 = m_splitter->widget(1)->width() - trailingSpacing;
@@ -212,6 +228,11 @@ QWidget *DolphinNavigatorsWidgetAction::createNavigatorWidget(Side side) const
     auto emptyTrashButton = newEmptyTrashButton(urlNavigator, navigatorWidget);
     layout->addWidget(emptyTrashButton);
 
+#if !(KIO_VERSION < QT_VERSION_CHECK(5, 78, 0))
+    auto networkFolderButton = newNetworkFolderButton(urlNavigator, navigatorWidget);
+    layout->addWidget(networkFolderButton);
+#endif
+
     connect(urlNavigator, &KUrlNavigator::urlChanged, this, [this]() {
         // We have to wait for DolphinUrlNavigator::sizeHint() to update which
         // happens a little bit later than when urlChanged is emitted.
@@ -249,6 +270,38 @@ QPushButton *DolphinNavigatorsWidgetAction::newEmptyTrashButton(const DolphinUrl
     return emptyTrashButton;
 }
 
+#if !(KIO_VERSION < QT_VERSION_CHECK(5, 78, 0))
+QPushButton *DolphinNavigatorsWidgetAction::networkFolderButton(DolphinNavigatorsWidgetAction::Side side)
+{
+    int sideIndex = (side == Primary ? 0 : 1);
+    if (side == Primary) {
+        return static_cast<QPushButton *>(m_splitter->widget(sideIndex)->layout()->itemAt(3)->widget());
+    }
+    return static_cast<QPushButton *>(m_splitter->widget(sideIndex)->layout()->itemAt(2)->widget());
+}
+
+QPushButton *DolphinNavigatorsWidgetAction::newNetworkFolderButton(const DolphinUrlNavigator *urlNavigator, QWidget *parent) const
+{
+    auto networkFolderButton = new QPushButton(QIcon::fromTheme(QStringLiteral("folder-add")),
+                                        i18nc("@action:button", "Add Network Folder"), parent);
+    networkFolderButton->setFlat(true);
+    connect(networkFolderButton, &QPushButton::clicked,
+            this, [networkFolderButton]() {
+                KService::Ptr service = KService::serviceByDesktopName(QStringLiteral("org.kde.knetattach"));
+                auto *job = new KIO::ApplicationLauncherJob(service, networkFolderButton);
+                auto *delegate = new KNotificationJobUiDelegate;
+                delegate->setAutoErrorHandlingEnabled(true);
+                job->setUiDelegate(delegate);
+                job->start();
+            });
+    networkFolderButton->hide();
+    connect(urlNavigator, &KUrlNavigator::urlChanged, this, [networkFolderButton, urlNavigator]() {
+        networkFolderButton->setVisible(urlNavigator->locationUrl().scheme() == QLatin1String("remote"));
+    });
+    return networkFolderButton;
+}
+#endif
+
 QWidget *DolphinNavigatorsWidgetAction::spacing(Side side, Position position) const
 {
     int sideIndex = (side == Primary ? 0 : 1);
@@ -257,9 +310,17 @@ QWidget *DolphinNavigatorsWidgetAction::spacing(Side side, Position position) co
         return m_splitter->widget(sideIndex)->layout()->itemAt(0)->widget();
     }
     if (side == Primary) {
+#if KIO_VERSION < QT_VERSION_CHECK(5, 78, 0)
         return m_splitter->widget(sideIndex)->layout()->itemAt(3)->widget();
+#else
+        return m_splitter->widget(sideIndex)->layout()->itemAt(4)->widget();
+#endif
     }
+#if KIO_VERSION < QT_VERSION_CHECK(5, 78, 0)
     return m_splitter->widget(sideIndex)->layout()->itemAt(2)->widget();
+#else
+    return m_splitter->widget(sideIndex)->layout()->itemAt(3)->widget();
+#endif
 }
 
 void DolphinNavigatorsWidgetAction::updateText()