When one instance of Dolphin activates another it passes a startupId (X11) / activation token (wayland) along.
On X11 this is passed using the DESKTOP_STARTUP_ID environment variable. The code tries to read that through KStartupInfo::startupId().
That doesn't work though, since Qt at startup reads the environment variable afterwards. However, it is nice enough to allow us to access
it through QX11Info::nextStartupId(). Use that to read the token in the first instance and pass it to the second instance like we do on Wayland
The user-facing impact of this is minimal since KStartupInfo::setNewStartupId internally falls back to KWindowSystem::forceActiveWindow when no
startupId is passed.
DBus
)
+if (UNIX AND NOT APPLE)
+ set(HAVE_X11 TRUE)
+
+ if (QT_MAJOR_VERSION STREQUAL "5")
+ find_package(Qt5X11Extras REQUIRED)
+ endif()
+endif()
+
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
KCMUtils
NewStuff
KF5::Crash
)
+if (HAVE_X11)
+ if (QT_MAJOR_VERSION STREQUAL "5")
+ target_link_libraries(dolphin PRIVATE Qt5::X11Extras)
+ else()
+ target_link_libraries(dolphin PRIVATE Qt::GuiPrivate)
+ endif()
+endif()
+
include(DbusInterfaceMacros)
generate_and_install_dbus_interface(
#cmakedefine01 HAVE_KUSERFEEDBACK
#cmakedefine01 HAVE_PACKAGEKIT
#cmakedefine01 HAVE_TERMINAL
+#cmakedefine01 HAVE_X11
if (KWindowSystem::isPlatformWayland()) {
KWindowSystem::setCurrentXdgActivationToken(activationToken);
} else {
- KStartupInfo::setNewStartupId(window()->windowHandle(), KStartupInfo::startupId());
+ KStartupInfo::setNewStartupId(window()->windowHandle(), activationToken.toUtf8());
}
KWindowSystem::activateWindow(window()->windowHandle());
#include <QDBusConnectionInterface>
#include <QSessionManager>
+#if HAVE_X11
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+#include <private/qtx11extras_p.h>
+#else
+#include <QX11Info>
+#endif
+#endif
+
#ifndef Q_OS_WIN
#include <unistd.h>
#endif
if (KWindowSystem::isPlatformWayland()) {
token = qEnvironmentVariable("XDG_ACTIVATION_TOKEN");
qunsetenv("XDG_ACTIVATION_TOKEN");
+ } else if (KWindowSystem::isPlatformX11()) {
+#if HAVE_X11
+ token = QX11Info::nextStartupId();
+#endif
}
if (Dolphin::attachToExistingInstance(urls, openFiles, splitView, QString(), token)) {