summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChatPage.cpp18
-rw-r--r--src/MainWindow.cpp4
-rw-r--r--src/MainWindow.h2
-rw-r--r--src/timeline/TimelineViewManager.cpp5
4 files changed, 21 insertions, 8 deletions
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(&notificationsManager, &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());