From 77e241b9e57a3248e2efb16e6cb081a19a666db7 Mon Sep 17 00:00:00 2001
From: Nicolas Werner <nicolas.werner@hotmail.de>
Date: Thu, 3 Sep 2020 19:34:17 +0200
Subject: [PATCH] Reenable top bar room settings menus on avatar or title
 clicks

Also fixes a bug with an empty room settings window introduced in the
port.
---
 resources/qml/TimelineView.qml       | 15 +++++++++++++++
 src/ChatPage.cpp                     |  3 +++
 src/MainWindow.cpp                   | 13 ++++---------
 src/MainWindow.h                     |  6 +++---
 src/timeline/TimelineModel.h         |  1 +
 src/timeline/TimelineViewManager.cpp |  6 +++---
 6 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml
index ea85acf9f..49f523a51 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 1339f353f..cf1a60620 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 90bffa70d..29abed864 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 e3e046981..4f54a195d 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 34f2f78ab..1e482be20 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 32d8b0b20..06f0fa3de 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
-- 
GitLab