diff options
| author | Kai Uwe Broulik <[email protected]> | 2026-03-20 20:32:39 +0100 |
|---|---|---|
| committer | Kai Uwe Broulik <[email protected]> | 2026-04-14 20:34:30 +0200 |
| commit | d5903bd810ee0447e6201a1cc36dcf186fc9c37d (patch) | |
| tree | 4c40677a7c1d40c50a7466343a3630c00c8427a3 /src/dolphinnavigatorswidgetaction.cpp | |
| parent | 902a47a468ca6a315d577c73cbb51f6aba94d1ac (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.cpp | 42 |
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() |
