diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index ea85acf9fc1da9ba142e9707be02a1ad392ced87..49f523a5155206fbc71914647784369e036bf82a 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -126,6 +126,11 @@ Page { color: colors.base + MouseArea { + anchors.fill: parent + onClicked: timelineManager.openRoomSettings(); + } + GridLayout { id: topLayout @@ -164,6 +169,11 @@ Page { height: avatarSize url: chat.model.roomAvatarUrl.replace("mxc://", "image://MxcImage/") displayName: chat.model.roomName + + MouseArea { + anchors.fill: parent + onClicked: timelineManager.openRoomSettings(); + } } Label { @@ -173,6 +183,11 @@ Page { font.pointSize: fontMetrics.font.pointSize * 1.1 text: chat.model.roomName + + MouseArea { + anchors.fill: parent + onClicked: timelineManager.openRoomSettings(); + } } MatrixText { Layout.fillWidth: true diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 1339f353fc282f78aab440ed123fdddd6b37cba1..cf1a606200d5d259b9af39375547e4a3a1fdd161 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -225,6 +225,9 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent) } }); + connect(room_list_, &RoomList::roomChanged, this, [this](QString room_id) { + this->current_room_ = room_id; + }); connect(room_list_, &RoomList::roomChanged, text_input_, &TextInputWidget::stopTyping); connect(room_list_, &RoomList::roomChanged, splitter, &Splitter::showChatView); connect(room_list_, &RoomList::roomChanged, text_input_, &TextInputWidget::focusLineEdit); diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 90bffa70da4363b202dd933cb44791e6468758e9..29abed864b6d3650304736de54e92798c2f83b73 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -340,9 +340,7 @@ MainWindow::openUserProfile(const QString &user_id, const QString &room_id) void MainWindow::openRoomSettings(const QString &room_id) { - const auto roomToSearch = room_id.isEmpty() ? chat_page_->currentRoom() : ""; - - auto dialog = new dialogs::RoomSettings(roomToSearch, this); + auto dialog = new dialogs::RoomSettings(room_id, this); showDialog(dialog); } @@ -350,8 +348,7 @@ MainWindow::openRoomSettings(const QString &room_id) void MainWindow::openMemberListDialog(const QString &room_id) { - const auto roomToSearch = room_id.isEmpty() ? chat_page_->currentRoom() : ""; - auto dialog = new dialogs::MemberList(roomToSearch, this); + auto dialog = new dialogs::MemberList(room_id, this); showDialog(dialog); } @@ -359,11 +356,9 @@ MainWindow::openMemberListDialog(const QString &room_id) void MainWindow::openLeaveRoomDialog(const QString &room_id) { - auto roomToLeave = room_id.isEmpty() ? chat_page_->currentRoom() : room_id; - auto dialog = new dialogs::LeaveRoom(this); - connect(dialog, &dialogs::LeaveRoom::leaving, this, [this, roomToLeave]() { - chat_page_->leaveRoom(roomToLeave); + connect(dialog, &dialogs::LeaveRoom::leaving, this, [this, room_id]() { + chat_page_->leaveRoom(room_id); }); showDialog(dialog); diff --git a/src/MainWindow.h b/src/MainWindow.h index e3e046981756794cd52b800b75fade489e35d81d..4f54a195dc9a9b54d1308cd047e84be35b94b38b 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -68,14 +68,14 @@ public: static MainWindow *instance() { return instance_; }; void saveCurrentWindowSize(); - void openLeaveRoomDialog(const QString &room_id = ""); + void openLeaveRoomDialog(const QString &room_id); void openInviteUsersDialog(std::function<void(const QStringList &invitees)> callback); void openCreateRoomDialog( std::function<void(const mtx::requests::CreateRoom &request)> callback); void openJoinRoomDialog(std::function<void(const QString &room_id)> callback); void openLogoutDialog(); - void openRoomSettings(const QString &room_id = ""); - void openMemberListDialog(const QString &room_id = ""); + void openRoomSettings(const QString &room_id); + void openMemberListDialog(const QString &room_id); void openUserProfile(const QString &user_id, const QString &room_id); void openReadReceiptsDialog(const QString &event_id); diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index 34f2f78abb286bcc9fa6a80a6fa40d0d5c0c6089..1e482be20826796bb863053d964311aa22f1a955 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -260,6 +260,7 @@ public slots: QString roomName() const; QString roomTopic() const; QString roomAvatarUrl() const; + QString roomId() const { return room_id_; } private slots: void addPendingMessage(mtx::events::collections::TimelineEvents event); diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp index 32d8b0b2049b037aa5668f8d8e7452b27c01fbbf..06f0fa3de83d28d19c5a85bb5a19d780eb05f685 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp @@ -253,17 +253,17 @@ TimelineViewManager::openInviteUsersDialog() void TimelineViewManager::openMemberListDialog() const { - MainWindow::instance()->openMemberListDialog(); + MainWindow::instance()->openMemberListDialog(timeline_->roomId()); } void TimelineViewManager::openLeaveRoomDialog() const { - MainWindow::instance()->openLeaveRoomDialog(); + MainWindow::instance()->openLeaveRoomDialog(timeline_->roomId()); } void TimelineViewManager::openRoomSettings() const { - MainWindow::instance()->openRoomSettings(); + MainWindow::instance()->openRoomSettings(timeline_->roomId()); } void