┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/dolphinnavigatorswidgetaction.cpp
diff options
context:
space:
mode:
authorKai Uwe Broulik <[email protected]>2026-03-20 20:32:39 +0100
committerKai Uwe Broulik <[email protected]>2026-04-14 20:34:30 +0200
commitd5903bd810ee0447e6201a1cc36dcf186fc9c37d (patch)
tree4c40677a7c1d40c50a7466343a3630c00c8427a3 /src/dolphinnavigatorswidgetaction.cpp
parent902a47a468ca6a315d577c73cbb51f6aba94d1ac (diff)
dolphinnavigatorswidgetaction: Add "Open KDE Connect" button
When browsing kdeconnect scheme, offer to open the KDE Connect app to configure the devices. On the overview, the button just opens the app. When listing storage on a device, it opens the app directly with the given device.
Diffstat (limited to 'src/dolphinnavigatorswidgetaction.cpp')
-rw-r--r--src/dolphinnavigatorswidgetaction.cpp42
1 files changed, 38 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()