diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp
index 88226c33..35489f66 100644
--- a/src/ChatPage.cpp
+++ b/src/ChatPage.cpp
@@ -152,16 +152,26 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QObject *parent)
this,
[this](const QString &roomid, const QString &eventid) {
Q_UNUSED(eventid)
- view_manager_->rooms()->setCurrentRoom(roomid);
- MainWindow::instance()->requestActivate();
+ auto exWin = MainWindow::instance()->windowForRoom(roomid);
+ if (exWin) {
+ exWin->requestActivate();
+ } else {
+ view_manager_->rooms()->setCurrentRoom(roomid);
+ MainWindow::instance()->requestActivate();
+ }
});
connect(¬ificationsManager,
&NotificationsManager::sendNotificationReply,
this,
[this](const QString &roomid, const QString &eventid, const QString &body) {
- view_manager_->rooms()->setCurrentRoom(roomid);
view_manager_->queueReply(roomid, eventid, body);
- MainWindow::instance()->requestActivate();
+ auto exWin = MainWindow::instance()->windowForRoom(roomid);
+ if (exWin) {
+ exWin->requestActivate();
+ } else {
+ view_manager_->rooms()->setCurrentRoom(roomid);
+ MainWindow::instance()->requestActivate();
+ }
});
connect(
diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index 7f62b23b..6cae64b2 100644
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -445,8 +445,8 @@ MainWindow::removePerRoomWindow(const QString &room, QWindow *window)
{
roomWindows_.remove(room, window);
}
-const QWindow *
-MainWindow::windowForRoom(const QString &room) const
+QWindow *
+MainWindow::windowForRoom(const QString &room)
{
auto currMainWindowRoom = ChatPage::instance()->timelineManager()->rooms()->currentRoom();
if ((currMainWindowRoom && currMainWindowRoom->roomId() == room) ||
diff --git a/src/MainWindow.h b/src/MainWindow.h
index 8c34b348..3db18a98 100644
--- a/src/MainWindow.h
+++ b/src/MainWindow.h
@@ -61,7 +61,7 @@ public:
Q_INVOKABLE void addPerRoomWindow(const QString &room, QWindow *window);
Q_INVOKABLE void removePerRoomWindow(const QString &room, QWindow *window);
- const QWindow *windowForRoom(const QString &room) const;
+ QWindow *windowForRoom(const QString &room);
QString focusedRoom() const;
protected:
diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index b37e24b0..58426178 100644
--- a/src/timeline/TimelineViewManager.cpp
+++ b/src/timeline/TimelineViewManager.cpp
@@ -222,7 +222,10 @@ void
TimelineViewManager::showEvent(const QString &room_id, const QString &event_id)
{
if (auto room = rooms_->getRoomById(room_id)) {
- if (rooms_->currentRoom() != room) {
+ auto exWin = MainWindow::instance()->windowForRoom(room_id);
+ if (exWin) {
+ exWin->requestActivate();
+ } else if (rooms_->currentRoom() != room) {
rooms_->setCurrentRoom(room_id);
MainWindow::instance()->requestActivate();
nhlog::ui()->info("Activated room {}", room_id.toStdString());
|