From 5e84fffd6ed97a173d7250e7563998ea5dc395a0 Mon Sep 17 00:00:00 2001 From: Andrey Butirsky Date: Fri, 20 Aug 2021 12:31:36 +0300 Subject: [PATCH] DBus activation with filemanager iface In Dolphin on wayland currently, if you right clicks a file and create a zip file from it, Dolphin makes a new window. What we want to happen is Dolphin to focus the window we have with the file selected. This patches Dolphin's dbusinterface.cpp to call KWindowSystem::setCurrentXdgActivationToken() with the startupID --- src/dbusinterface.cpp | 7 ++++--- src/global.cpp | 3 +-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/dbusinterface.cpp b/src/dbusinterface.cpp index 2b674b9688..e4f647f737 100644 --- a/src/dbusinterface.cpp +++ b/src/dbusinterface.cpp @@ -9,6 +9,7 @@ #include "dolphin_generalsettings.h" #include +#include #include #include @@ -28,11 +29,11 @@ DBusInterface::DBusInterface() : void DBusInterface::ShowFolders(const QStringList& uriList, const QString& startUpId) { - Q_UNUSED(startUpId) const QList urls = Dolphin::validateUris(uriList); if (urls.isEmpty()) { return; } + KWindowSystem::setCurrentXdgActivationToken(startUpId); const auto serviceName = isDaemon() ? QString() : QStringLiteral("org.kde.dolphin-%1").arg(QCoreApplication::applicationPid()); if(!Dolphin::attachToExistingInstance(urls, false, GeneralSettings::splitView(), serviceName)) { Dolphin::openNewWindow(urls); @@ -41,11 +42,11 @@ void DBusInterface::ShowFolders(const QStringList& uriList, const QString& start void DBusInterface::ShowItems(const QStringList& uriList, const QString& startUpId) { - Q_UNUSED(startUpId) const QList urls = Dolphin::validateUris(uriList); if (urls.isEmpty()) { return; } + KWindowSystem::setCurrentXdgActivationToken(startUpId); const auto serviceName = isDaemon() ? QString() : QStringLiteral("org.kde.dolphin-%1").arg(QCoreApplication::applicationPid()); if(!Dolphin::attachToExistingInstance(urls, true, GeneralSettings::splitView(), serviceName)) { Dolphin::openNewWindow(urls, nullptr, Dolphin::OpenNewWindowFlag::Select); @@ -54,9 +55,9 @@ void DBusInterface::ShowItems(const QStringList& uriList, const QString& startUp void DBusInterface::ShowItemProperties(const QStringList& uriList, const QString& startUpId) { - Q_UNUSED(startUpId) const QList urls = Dolphin::validateUris(uriList); if (!urls.isEmpty()) { + KWindowSystem::setCurrentXdgActivationToken(startUpId); KPropertiesDialog::showDialog(urls); } } diff --git a/src/global.cpp b/src/global.cpp index d217a67ec8..e81b7d34d5 100644 --- a/src/global.cpp +++ b/src/global.cpp @@ -62,8 +62,7 @@ bool Dolphin::attachToExistingInstance(const QList& inputUrls, bool openFi { bool attached = false; - // TODO: once Wayland clients can raise or activate themselves remove check from conditional - if (KWindowSystem::isPlatformWayland() || inputUrls.isEmpty() || !GeneralSettings::openExternallyCalledFolderInNewTab()) { + if (inputUrls.isEmpty() || !GeneralSettings::openExternallyCalledFolderInNewTab()) { return false; }