┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dolphinnavigatorswidgetaction.cpp42
-rw-r--r--src/dolphinnavigatorswidgetaction.h14
2 files changed, 52 insertions, 4 deletions
diff --git a/src/dolphinnavigatorswidgetaction.cpp b/src/dolphinnavigatorswidgetaction.cpp
index c44b7e796..b16b4876b 100644
--- a/src/dolphinnavigatorswidgetaction.cpp
+++ b/src/dolphinnavigatorswidgetaction.cpp
@@ -15,6 +15,7 @@
#include <KService>
#include <KIO/ApplicationLauncherJob>
+#include <KIO/CommandLauncherJob>
#include <QApplication>
#include <QHBoxLayout>
@@ -55,7 +56,7 @@ void DolphinNavigatorsWidgetAction::adjustSpacing()
leadingSpacing = 0;
}
int trailingSpacing = (viewGeometries.globalXOfNavigatorsWidget + m_splitter->width()) - (viewGeometries.globalXOfPrimary + viewGeometries.widthOfPrimary);
- if (trailingSpacing < 0 || emptyTrashButton(Primary)->isVisible() || networkFolderButton(Primary)->isVisible()) {
+ if (trailingSpacing < 0 || emptyTrashButton(Primary)->isVisible() || networkFolderButton(Primary)->isVisible() || kdeConnectButton(Primary)->isVisible()) {
trailingSpacing = 0;
}
const int widthLeftForUrlNavigator = m_splitter->widget(0)->width() - leadingSpacing - trailingSpacing;
@@ -81,7 +82,8 @@ void DolphinNavigatorsWidgetAction::adjustSpacing()
spacing(Primary, Trailing)->setFixedWidth(0);
trailingSpacing = (viewGeometries.globalXOfNavigatorsWidget + m_splitter->width()) - (viewGeometries.globalXOfSecondary + viewGeometries.widthOfSecondary);
- if (trailingSpacing < 0 || emptyTrashButton(Secondary)->isVisible() || networkFolderButton(Secondary)->isVisible()) {
+ if (trailingSpacing < 0 || emptyTrashButton(Secondary)->isVisible() || networkFolderButton(Secondary)->isVisible()
+ || kdeConnectButton(Secondary)->isVisible()) {
trailingSpacing = 0;
} else {
const int widthLeftForUrlNavigator2 = m_splitter->widget(1)->width() - trailingSpacing;
@@ -213,6 +215,9 @@ QWidget *DolphinNavigatorsWidgetAction::createNavigatorWidget(Side side) const
auto networkFolderButton = newNetworkFolderButton(urlNavigator, navigatorWidget);
layout->addWidget(networkFolderButton);
+ auto kdeConnectButton = newKdeConnectButton(urlNavigator, navigatorWidget);
+ layout->addWidget(kdeConnectButton);
+
connect(
urlNavigator,
&KUrlNavigator::urlChanged,
@@ -303,6 +308,35 @@ QPushButton *DolphinNavigatorsWidgetAction::newNetworkFolderButton(const Dolphin
return networkFolderButton;
}
+QPushButton *DolphinNavigatorsWidgetAction::kdeConnectButton(DolphinNavigatorsWidgetAction::Side side)
+{
+ const int sideIndex = (side == Primary ? 0 : 1);
+ return m_splitter->widget(sideIndex)->findChild<QPushButton *>(QStringLiteral("KdeConnectButton"));
+}
+
+QPushButton *DolphinNavigatorsWidgetAction::newKdeConnectButton(const DolphinUrlNavigator *urlNavigator, QWidget *parent) const
+{
+ auto kdeConnectButton = new QPushButton(QIcon::fromTheme(QStringLiteral("kdeconnect")), i18nc("@action:button", "Open KDE Connect"), parent);
+ kdeConnectButton->setObjectName(QStringLiteral("KdeConnectButton"));
+ kdeConnectButton->setFlat(true);
+ connect(kdeConnectButton, &QPushButton::clicked, urlNavigator, [kdeConnectButton, urlNavigator]() {
+ QStringList args;
+ if (const QString deviceId = urlNavigator->locationUrl().host(); !deviceId.isEmpty()) {
+ args << QStringLiteral("--device") << deviceId;
+ }
+ auto *job = new KIO::CommandLauncherJob(QStringLiteral("kdeconnect-app"), args);
+ job->setDesktopName(QStringLiteral("org.kde.kdeconnect.app"));
+ job->setUiDelegate(new KNotificationJobUiDelegate(KJobUiDelegate::AutoErrorHandlingEnabled));
+ job->start();
+ });
+ kdeConnectButton->hide();
+ connect(urlNavigator, &KUrlNavigator::urlChanged, kdeConnectButton, [kdeConnectButton, urlNavigator]() {
+ kdeConnectButton->setVisible(urlNavigator->locationUrl().scheme() == QLatin1String("kdeconnect")
+ && KService::serviceByDesktopName(QStringLiteral("org.kde.kdeconnect.app")));
+ });
+ return kdeConnectButton;
+}
+
QWidget *DolphinNavigatorsWidgetAction::spacing(Side side, Position position) const
{
int sideIndex = (side == Primary ? 0 : 1);
@@ -311,9 +345,9 @@ QWidget *DolphinNavigatorsWidgetAction::spacing(Side side, Position position) co
return m_splitter->widget(sideIndex)->layout()->itemAt(0)->widget();
}
if (side == Primary) {
- return m_splitter->widget(sideIndex)->layout()->itemAt(4)->widget();
+ return m_splitter->widget(sideIndex)->layout()->itemAt(5)->widget();
}
- return m_splitter->widget(sideIndex)->layout()->itemAt(3)->widget();
+ return m_splitter->widget(sideIndex)->layout()->itemAt(4)->widget();
}
void DolphinNavigatorsWidgetAction::updateText()
diff --git a/src/dolphinnavigatorswidgetaction.h b/src/dolphinnavigatorswidgetaction.h
index c9ce4ece2..8395f0b91 100644
--- a/src/dolphinnavigatorswidgetaction.h
+++ b/src/dolphinnavigatorswidgetaction.h
@@ -145,6 +145,20 @@ private:
*/
QPushButton *newNetworkFolderButton(const DolphinUrlNavigator *urlNavigator, QWidget *parent) const;
+ /**
+ * Used to retrieve the kdeConnectButtons for the navigatorWidgets on
+ * both sides.
+ */
+ QPushButton *kdeConnectButton(Side side);
+
+ /**
+ * Creates a new add "Open KDE Connect" button.
+ * @param urlNavigator Only when this UrlNavigator shows a "kdeconnect" URL
+ * will the button be visible.
+ * @param parent The object that should be the button's parent.
+ */
+ QPushButton *newKdeConnectButton(const DolphinUrlNavigator *urlNavigator, QWidget *parent) const;
+
enum Position { Leading, Trailing };
/**
* Used to retrieve both the leading and trailing spacing for the navigatorWidgets