diff --git a/qml/main.qml b/qml/main.qml index 07e66803a..8fa2d2981 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -223,6 +223,8 @@ Kirigami.ApplicationWindow { onGlobalErrorOccured: showPassiveNotification(error + ": " + detail) onShowWindow: root.showWindow() + + onOpenRoom: roomManager.enterRoom(room) } RoomListModel { diff --git a/src/controller.h b/src/controller.h index 22c809e35..6412af4be 100644 --- a/src/controller.h +++ b/src/controller.h @@ -20,6 +20,8 @@ class QKeySequences; #include "settings.h" #include "user.h" +class NeoChatRoom; + using namespace Quotient; class Controller : public QObject @@ -109,6 +111,7 @@ Q_SIGNALS: void aboutDataChanged(); void passwordStatus(Controller::PasswordStatus _t1); void showWindow(); + void openRoom(NeoChatRoom *room); public Q_SLOTS: void logout(Quotient::Connection *conn, bool serverSideLogout); diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp index 11cfce698..4e0320032 100644 --- a/src/neochatroom.cpp +++ b/src/neochatroom.cpp @@ -61,7 +61,7 @@ NeoChatRoom::NeoChatRoom(Connection *connection, QString roomId, JoinState joinS return; } - NotificationsManager::instance().postNotification(id(), lastEvent->id(), displayName(), sender->displayname(this), eventToString(*lastEvent), avatar(128)); + NotificationsManager::instance().postNotification(this, lastEvent->id(), displayName(), sender->displayname(this), eventToString(*lastEvent), avatar(128)); }); connect(this, &Room::aboutToAddHistoricalMessages, diff --git a/src/notificationsmanager.cpp b/src/notificationsmanager.cpp index 4d3937c75..6b81ccb39 100644 --- a/src/notificationsmanager.cpp +++ b/src/notificationsmanager.cpp @@ -12,6 +12,7 @@ #include #include "neochatconfig.h" +#include "controller.h" NotificationsManager &NotificationsManager::instance() { @@ -24,7 +25,7 @@ NotificationsManager::NotificationsManager(QObject *parent) { } -void NotificationsManager::postNotification(const QString &roomid, const QString &eventid, const QString &roomname, const QString &sender, const QString &text, const QImage &icon) +void NotificationsManager::postNotification(NeoChatRoom *room, const QString &eventid, const QString &roomname, const QString &sender, const QString &text, const QImage &icon) { if (!NeoChatConfig::self()->showNotifications()) { return; @@ -42,7 +43,14 @@ void NotificationsManager::postNotification(const QString &roomid, const QString notification->setText(text.toHtmlEscaped()); notification->setPixmap(img); + + notification->setDefaultAction(i18n("Open NeoChat in this room")); + connect(notification, &KNotification::defaultActivated, this, [this, room]() { + Q_EMIT Controller::instance().openRoom(room); + Q_EMIT Controller::instance().showWindow(); + }); + notification->sendEvent(); - m_notifications.insert(roomid, notification); + m_notifications.insert(room->id(), notification); } diff --git a/src/notificationsmanager.h b/src/notificationsmanager.h index d307e9373..a4b610883 100644 --- a/src/notificationsmanager.h +++ b/src/notificationsmanager.h @@ -12,6 +12,8 @@ #include +#include "neochatroom.h" + class NotificationsManager : public QObject { Q_OBJECT @@ -19,7 +21,7 @@ class NotificationsManager : public QObject public: static NotificationsManager &instance(); - Q_INVOKABLE void postNotification(const QString &roomId, const QString &eventId, const QString &roomName, const QString &senderName, const QString &text, const QImage &icon); + Q_INVOKABLE void postNotification(NeoChatRoom *roomId, const QString &eventId, const QString &roomName, const QString &senderName, const QString &text, const QImage &icon); private: NotificationsManager(QObject *parent = nullptr);