From 87070289fd839b5be40e7cb9531d43921a10a99a Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sat, 7 May 2022 19:03:58 +0200 Subject: [PATCH] Activate window that already has the room open if possible --- resources/qml/RoomList.qml | 2 +- src/ChatPage.cpp | 18 ++++++++++++++---- src/MainWindow.cpp | 4 ++-- src/MainWindow.h | 2 +- src/timeline/TimelineViewManager.cpp | 5 ++++- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml index 440a9cb9..52370746 100644 --- a/resources/qml/RoomList.qml +++ b/resources/qml/RoomList.qml @@ -82,7 +82,7 @@ Page { minimumHeight: 150 palette: Nheko.colors color: Nheko.colors.window - title: room.roomName + title: room.plainRoomName modality: Qt.NonModal flags: Qt.Window | Qt.WindowCloseButtonHint | Qt.WindowTitleHint 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, 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());