From 284a1734ae98fbf18d4fb73db35ca47bae0a0f98 Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Fri, 3 Dec 2021 17:16:35 +0100 Subject: [PATCH] Support raising when we receive a notification --- qml/main.qml | 9 +++++++-- src/main.cpp | 8 +++++++- src/notificationsmanager.cpp | 6 ++++++ 3 files changed, 20 insertions(+), 3 deletions(-) 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(); });