summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--resources/qml/RoomMembers.qml5
-rw-r--r--resources/qml/RoomSettings.qml12
-rw-r--r--resources/qml/Root.qml2
-rw-r--r--resources/qml/TopBar.qml10
-rw-r--r--src/MemberList.cpp2
-rw-r--r--src/MemberList.h2
-rw-r--r--src/timeline/TimelineModel.cpp25
-rw-r--r--src/timeline/TimelineModel.h7
-rw-r--r--src/timeline/TimelineViewManager.cpp28
-rw-r--r--src/timeline/TimelineViewManager.h7
10 files changed, 56 insertions, 44 deletions
diff --git a/resources/qml/RoomMembers.qml b/resources/qml/RoomMembers.qml
index bc8a90d2..641a08be 100644
--- a/resources/qml/RoomMembers.qml
+++ b/resources/qml/RoomMembers.qml
@@ -41,7 +41,7 @@ ApplicationWindow {
             displayName: members.roomName
             Layout.alignment: Qt.AlignHCenter
             url: members.avatarUrl.replace("mxc://", "image://MxcImage/")
-            onClicked: Rooms.currentRoom.openRoomSettings(members.roomId)
+            onClicked: TimelineManager.openRoomSettings(members.roomId)
         }
 
         ElidedLabel {
@@ -57,7 +57,7 @@ ApplicationWindow {
             hoverEnabled: true
             ToolTip.visible: hovered
             ToolTip.text: qsTr("Invite more people")
-            onClicked: Rooms.currentRoom.openInviteUsers()
+            onClicked: TimelineManager.openInviteUsers(members.roomId)
         }
 
         ScrollView {
@@ -121,7 +121,6 @@ ApplicationWindow {
                 footer: Item {
                     width: parent.width
                     visible: (members.numUsersLoaded < members.memberCount) && members.loadingMoreMembers
-
                     // use the default height if it's visible, otherwise no height at all
                     height: membersLoadingSpinner.height
                     anchors.margins: Nheko.paddingMedium
diff --git a/resources/qml/RoomSettings.qml b/resources/qml/RoomSettings.qml
index 2701edf9..b4936f3e 100644
--- a/resources/qml/RoomSettings.qml
+++ b/resources/qml/RoomSettings.qml
@@ -4,7 +4,7 @@
 
 import "./ui"
 import Qt.labs.platform 1.1 as Platform
-import QtQuick 2.9
+import QtQuick 2.15
 import QtQuick.Controls 2.3
 import QtQuick.Layouts 1.2
 import QtQuick.Window 2.3
@@ -105,6 +105,16 @@ ApplicationWindow {
             MatrixText {
                 text: qsTr("%1 member(s)").arg(roomSettings.memberCount)
                 Layout.alignment: Qt.AlignHCenter
+
+                TapHandler {
+                    onTapped: TimelineManager.openRoomMembers(roomSettings.roomId)
+                }
+
+                CursorShape {
+                    cursorShape: Qt.PointingHandCursor
+                    anchors.fill: parent
+                }
+
             }
 
         }
diff --git a/resources/qml/Root.qml b/resources/qml/Root.qml
index f71c18e2..8e226639 100644
--- a/resources/qml/Root.qml
+++ b/resources/qml/Root.qml
@@ -133,7 +133,7 @@ Page {
     }
 
     Connections {
-        target: Rooms.currentRoom
+        target: TimelineManager
         onOpenRoomMembersDialog: {
             var membersDialog = roomMembersComponent.createObject(timelineRoot, {
                 "members": members,
diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml
index 48491f84..8543d02a 100644
--- a/resources/qml/TopBar.qml
+++ b/resources/qml/TopBar.qml
@@ -24,7 +24,7 @@ Rectangle {
     TapHandler {
         onSingleTapped: {
             if (room)
-                room.openRoomSettings();
+                TimelineManager.openRoomSettings(room.roomId);
 
             eventPoint.accepted = true;
         }
@@ -66,7 +66,7 @@ Rectangle {
             displayName: roomName
             onClicked: {
                 if (room)
-                    room.openRoomSettings();
+                    TimelineManager.openRoomSettings(room.roomId);
 
             }
         }
@@ -111,12 +111,12 @@ Rectangle {
                 Platform.MenuItem {
                     visible: room ? room.permissions.canInvite() : false
                     text: qsTr("Invite users")
-                    onTriggered: Rooms.currentRoom.openInviteUsers()
+                    onTriggered: TimelineManager.openInviteUsers(room.roomId)
                 }
 
                 Platform.MenuItem {
                     text: qsTr("Members")
-                    onTriggered: Rooms.currentRoom.openRoomMembers()
+                    onTriggered: TimelineManager.openRoomMembers(room.roomId)
                 }
 
                 Platform.MenuItem {
@@ -126,7 +126,7 @@ Rectangle {
 
                 Platform.MenuItem {
                     text: qsTr("Settings")
-                    onTriggered: room.openRoomSettings()
+                    onTriggered: TimelineManager.openRoomSettings(room.roomId)
                 }
 
             }
diff --git a/src/MemberList.cpp b/src/MemberList.cpp
index 415e3b57..0ef3b696 100644
--- a/src/MemberList.cpp
+++ b/src/MemberList.cpp
@@ -22,7 +22,7 @@
 #include "timeline/TimelineViewManager.h"
 #include "ui/Avatar.h"
 
-MemberList::MemberList(const QString &room_id, QWidget *parent)
+MemberList::MemberList(const QString &room_id, QObject *parent)
   : QAbstractListModel{parent}
   , room_id_{room_id}
 {
diff --git a/src/MemberList.h b/src/MemberList.h
index 070666a2..9932f6a4 100644
--- a/src/MemberList.h
+++ b/src/MemberList.h
@@ -25,7 +25,7 @@ public:
                 DisplayName,
                 AvatarUrl,
         };
-        MemberList(const QString &room_id, QWidget *parent = nullptr);
+        MemberList(const QString &room_id, QObject *parent = nullptr);
 
         QHash<int, QByteArray> roleNames() const override;
         int rowCount(const QModelIndex &parent = QModelIndex()) const override
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 66d931fd..ee5564a5 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -1067,31 +1067,6 @@ TimelineModel::openUserProfile(QString userid)
 }
 
 void
-TimelineModel::openRoomMembers()
-{
-        MemberList *memberList = new MemberList(roomId());
-        emit openRoomMembersDialog(memberList);
-}
-
-void
-TimelineModel::openRoomSettings(QString room_id)
-{
-        RoomSettings *settings = new RoomSettings(room_id == QString() ? roomId() : room_id, this);
-        connect(this, &TimelineModel::roomAvatarUrlChanged, settings, &RoomSettings::avatarChanged);
-        emit openRoomSettingsDialog(settings);
-}
-
-void
-TimelineModel::openInviteUsers(QString roomId)
-{
-        InviteesModel *model = new InviteesModel{this};
-        connect(model, &InviteesModel::accept, this, [this, model, roomId]() {
-                emit manager_->inviteUsers(roomId == QString() ? room_id_ : roomId, model->mxids());
-        });
-        emit openInviteUsersDialog(model);
-}
-
-void
 TimelineModel::replyAction(QString id)
 {
         setReply(id);
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 0d1eb1f9..0e2ce153 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -239,9 +239,6 @@ public:
         Q_INVOKABLE void forwardMessage(QString eventId, QString roomId);
         Q_INVOKABLE void viewDecryptedRawMessage(QString id) const;
         Q_INVOKABLE void openUserProfile(QString userid);
-        Q_INVOKABLE void openRoomMembers();
-        Q_INVOKABLE void openRoomSettings(QString room_id = QString());
-        Q_INVOKABLE void openInviteUsers(QString roomId = QString());
         Q_INVOKABLE void editAction(QString id);
         Q_INVOKABLE void replyAction(QString id);
         Q_INVOKABLE void readReceiptsAction(QString id) const;
@@ -358,10 +355,6 @@ signals:
         void lastMessageChanged();
         void notificationsChanged();
 
-        void openRoomMembersDialog(MemberList *members);
-        void openRoomSettingsDialog(RoomSettings *settings);
-        void openInviteUsersDialog(InviteesModel *invitees);
-
         void newMessageToSend(mtx::events::collections::TimelineEvents event);
         void addPendingMessageToStore(mtx::events::collections::TimelineEvents event);
         void updateFlowEventId(std::string event_id);
diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index 64493e5b..b1643798 100644
--- a/src/timeline/TimelineViewManager.cpp
+++ b/src/timeline/TimelineViewManager.cpp
@@ -352,6 +352,34 @@ TimelineViewManager::TimelineViewManager(CallManager *callManager, ChatPage *par
 }
 
 void
+TimelineViewManager::openRoomMembers(QString room_id)
+{
+        MemberList *memberList = new MemberList(room_id, this);
+        emit openRoomMembersDialog(memberList);
+}
+
+void
+TimelineViewManager::openRoomSettings(QString room_id)
+{
+        RoomSettings *settings = new RoomSettings(room_id, this);
+        connect(rooms_->getRoomById(room_id).data(),
+                &TimelineModel::roomAvatarUrlChanged,
+                settings,
+                &RoomSettings::avatarChanged);
+        emit openRoomSettingsDialog(settings);
+}
+
+void
+TimelineViewManager::openInviteUsers(QString roomId)
+{
+        InviteesModel *model = new InviteesModel{this};
+        connect(model, &InviteesModel::accept, this, [this, model, roomId]() {
+                emit inviteUsers(roomId, model->mxids());
+        });
+        emit openInviteUsersDialog(model);
+}
+
+void
 TimelineViewManager::setVideoCallItem()
 {
         WebRTCSession::instance().setVideoItem(
diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h
index 945ba2d5..374685e3 100644
--- a/src/timeline/TimelineViewManager.h
+++ b/src/timeline/TimelineViewManager.h
@@ -64,6 +64,10 @@ public:
         Q_INVOKABLE QString userPresence(QString id) const;
         Q_INVOKABLE QString userStatus(QString id) const;
 
+        Q_INVOKABLE void openRoomMembers(QString room_id);
+        Q_INVOKABLE void openRoomSettings(QString room_id);
+        Q_INVOKABLE void openInviteUsers(QString roomId);
+
         Q_INVOKABLE void focusMessageInput();
         Q_INVOKABLE void openLeaveRoomDialog(QString roomid) const;
         Q_INVOKABLE void removeVerificationFlow(DeviceVerificationFlow *flow);
@@ -85,6 +89,9 @@ signals:
         void focusChanged();
         void focusInput();
         void openImageOverlayInternalCb(QString eventId, QImage img);
+        void openRoomMembersDialog(MemberList *members);
+        void openRoomSettingsDialog(RoomSettings *settings);
+        void openInviteUsersDialog(InviteesModel *invitees);
         void openProfile(UserProfile *profile);
 
 public slots: