┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dbusinterface.cpp6
-rw-r--r--src/dolphinmainwindow.cpp12
-rw-r--r--src/dolphinmainwindow.h2
-rw-r--r--src/global.cpp5
-rw-r--r--src/global.h2
-rw-r--r--src/main.cpp10
6 files changed, 25 insertions, 12 deletions
diff --git a/src/dbusinterface.cpp b/src/dbusinterface.cpp
index 0d43dfc23..8d5bf7645 100644
--- a/src/dbusinterface.cpp
+++ b/src/dbusinterface.cpp
@@ -31,9 +31,8 @@ void DBusInterface::ShowFolders(const QStringList& uriList, const QString& start
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)) {
+ if(!Dolphin::attachToExistingInstance(urls, false, GeneralSettings::splitView(), serviceName, startUpId)) {
Dolphin::openNewWindow(urls);
}
}
@@ -44,9 +43,8 @@ void DBusInterface::ShowItems(const QStringList& uriList, const QString& startUp
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)) {
+ if(!Dolphin::attachToExistingInstance(urls, true, GeneralSettings::splitView(), serviceName, startUpId)) {
Dolphin::openNewWindow(urls, nullptr, Dolphin::OpenNewWindowFlag::Select);
};
}
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index 305c7f282..384e91ec9 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -281,11 +281,17 @@ void DolphinMainWindow::openFiles(const QStringList& files, bool splitView)
openFiles(QUrl::fromStringList(files), splitView);
}
-void DolphinMainWindow::activateWindow()
+void DolphinMainWindow::activateWindow(const QString &activationToken)
{
window()->setAttribute(Qt::WA_NativeWindow, true);
- KStartupInfo::setNewStartupId(window()->windowHandle(), KStartupInfo::startupId());
- KWindowSystem::activateWindow(window()->effectiveWinId());
+
+ if (KWindowSystem::isPlatformWayland()) {
+ KWindowSystem::setCurrentXdgActivationToken(activationToken);
+ } else {
+ KStartupInfo::setNewStartupId(window()->windowHandle(), KStartupInfo::startupId());
+ }
+
+ KWindowSystem::activateWindow(window()->windowHandle());
}
bool DolphinMainWindow::isActiveWindow()
diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h
index 6f922168c..bf74b77b7 100644
--- a/src/dolphinmainwindow.h
+++ b/src/dolphinmainwindow.h
@@ -139,7 +139,7 @@ public Q_SLOTS:
/**
* Tries to raise/activate the Dolphin window.
*/
- void activateWindow();
+ void activateWindow(const QString &activationToken);
bool isActiveWindow();
diff --git a/src/global.cpp b/src/global.cpp
index c9ec6a120..d5fbec6bc 100644
--- a/src/global.cpp
+++ b/src/global.cpp
@@ -15,6 +15,7 @@
#include <KDialogJobUiDelegate>
#include <KIO/ApplicationLauncherJob>
#include <KService>
+#include <KWindowSystem>
#include <QApplication>
@@ -56,7 +57,7 @@ void Dolphin::openNewWindow(const QList<QUrl> &urls, QWidget *window, const Open
job->start();
}
-bool Dolphin::attachToExistingInstance(const QList<QUrl>& inputUrls, bool openFiles, bool splitView, const QString& preferredService)
+bool Dolphin::attachToExistingInstance(const QList<QUrl>& inputUrls, bool openFiles, bool splitView, const QString& preferredService, const QString &activationToken)
{
bool attached = false;
@@ -121,7 +122,7 @@ bool Dolphin::attachToExistingInstance(const QList<QUrl>& inputUrls, bool openFi
interface.first->openDirectories(interface.second, splitView);
reply.waitForFinished();
if (!reply.isError()) {
- interface.first->activateWindow();
+ interface.first->activateWindow(activationToken);
attached = true;
}
}
diff --git a/src/global.h b/src/global.h
index ee9a7ec27..80ec03fd0 100644
--- a/src/global.h
+++ b/src/global.h
@@ -39,7 +39,7 @@ namespace Dolphin {
* @p preferredService needs to support the org.kde.dolphin.MainWindow dbus interface with the /dolphin/Dolphin_1 path.
* Returns true if the URLs were successfully attached.
*/
- bool attachToExistingInstance(const QList<QUrl>& inputUrls, bool openFiles, bool splitView, const QString& preferredService = QString());
+ bool attachToExistingInstance(const QList<QUrl>& inputUrls, bool openFiles, bool splitView, const QString& preferredService, const QString &activationToken);
/**
* Returns a QVector with all GUI-capable Dolphin instances
diff --git a/src/main.cpp b/src/main.cpp
index 017a31f1d..9da0c6fe8 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -23,6 +23,7 @@
#include <KLocalizedString>
#include <KConfigGui>
#include <KIO/PreviewJob>
+#include <KWindowSystem>
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
#include <Kdelibs4ConfigMigrator>
@@ -175,7 +176,14 @@ int main(int argc, char **argv)
}
if (!parser.isSet(QStringLiteral("new-window"))) {
- if (Dolphin::attachToExistingInstance(urls, openFiles, splitView)) {
+
+ QString token;
+ if (KWindowSystem::isPlatformWayland()) {
+ token = qEnvironmentVariable("XDG_ACTIVATION_TOKEN");
+ qunsetenv("XDG_ACTIVATION_TOKEN");
+ }
+
+ if (Dolphin::attachToExistingInstance(urls, openFiles, splitView, QString(), token)) {
// Successfully attached to existing instance of Dolphin
return 0;
}