diff --git a/qml/main.qml b/qml/main.qml index c927940c0..c1d8babc7 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -352,9 +352,14 @@ Kirigami.ApplicationWindow { showPassiveNotification(i18n("%1: %2", error, detail)); } - function onShowWindow() { + function onShowWindow(token = null) { root.showWindow() - root.raise() + if (token && KWindowSystem) { + KWindowSystem.setCurrentXdgActivationToken(basicNotification.xdgActivationToken) + KWindowSystem.activateWindow(root) + } else { + root.raise() + } } function onUserConsentRequired(url) { diff --git a/src/main.cpp b/src/main.cpp index f8820374d..8b814cbd9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -68,7 +68,7 @@ using namespace Quotient; -#ifdef HAVE_KDBUSADDONS +#ifdef HAVE_WINDOWSYSTEM static void raiseWindow(QWindow *window) { if (KWindowSystem::isPlatformWayland()) { @@ -209,6 +209,12 @@ int main(int argc, char *argv[]) qRegisterMetaType("GetRoomEventsJob*"); qRegisterMetaType("QMimeType"); +#ifdef HAVE_WINDOWSYSTEM + qmlRegisterSingletonType("org.kde.kwindowsystem.private", 1, 0, "KWindowSystem", [](QQmlEngine *, QJSEngine *) -> QObject * { + return KWindowSystem::self(); + }); +#endif + qRegisterMetaTypeStreamOperators(); QQmlApplicationEngine engine; diff --git a/src/notificationsmanager.cpp b/src/notificationsmanager.cpp index e44ce821f..75354895c 100644 --- a/src/notificationsmanager.cpp +++ b/src/notificationsmanager.cpp @@ -11,6 +11,9 @@ #include "knotifications_version.h" #include #include +#ifdef HAVE_WINDOWSYSTEM +#include +#endif #if KNOTIFICATIONS_VERSION >= QT_VERSION_CHECK(5, 81, 0) #include #endif @@ -85,6 +88,9 @@ void NotificationsManager::postInviteNotification(NeoChatRoom *room, const QStri notification->setPixmap(img); notification->setDefaultAction(i18n("Open this invitation in NeoChat")); connect(notification, &KNotification::defaultActivated, this, [=]() { +#ifdef HAVE_WINDOWSYSTEM + KWindowSystem::setCurrentXdgActivationToken(notification->xdgActivationToken()); +#endif RoomManager::instance().enterRoom(room); Q_EMIT Controller::instance().showWindow(); });