From f30b17bf738f7e3014bf5531529a2a078a0c5113 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Wed, 28 Apr 2021 15:06:57 +0200 Subject: [PATCH] Fix opening room in seperate window and unify leaving room code --- imports/NeoChat/Menu/RoomListContextMenu.qml | 10 +++----- imports/NeoChat/Page/RoomPage.qml | 5 +--- qml/main.qml | 2 +- src/roommanager.cpp | 27 ++++++++++++++------ src/roommanager.h | 3 +++ 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/imports/NeoChat/Menu/RoomListContextMenu.qml b/imports/NeoChat/Menu/RoomListContextMenu.qml index 4e58dc046..60f966d00 100644 --- a/imports/NeoChat/Menu/RoomListContextMenu.qml +++ b/imports/NeoChat/Menu/RoomListContextMenu.qml @@ -5,6 +5,7 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 +import org.kde.neochat 1.0 import NeoChat.Page 1.0 /** @@ -16,7 +17,7 @@ Menu { MenuItem { text: i18n("Open in new window") - onTriggered: roomManager.openWindow(room); + onTriggered: RoomManager.openWindow(room); } MenuSeparator {} @@ -43,12 +44,7 @@ Menu { MenuItem { text: i18n("Leave Room") - onTriggered: { - if(roomManager.currentRoom == root.room) { - pageStack.pop() - } - room.forget() - } + onTriggered: RoomManager.leaveRoom() } onClosed: destroy() diff --git a/imports/NeoChat/Page/RoomPage.qml b/imports/NeoChat/Page/RoomPage.qml index c9dc20568..c4aed2997 100644 --- a/imports/NeoChat/Page/RoomPage.qml +++ b/imports/NeoChat/Page/RoomPage.qml @@ -78,10 +78,7 @@ Kirigami.ScrollablePage { Layout.alignment : Qt.AlignHCenter text: i18n("Reject") - onClicked: { - page.currentRoom.forget() - RoomManager.getBack(); - } + onClicked: RoomManager.leave(page.currentRoom); } QQC2.Button { diff --git a/qml/main.qml b/qml/main.qml index 900cec78a..bdee91d48 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -103,7 +103,7 @@ Kirigami.ApplicationWindow { function onOpenRoomInNewWindow(room) { const secondayWindow = roomWindow.createObject(applicationWindow(), {currentRoom: room}); - secondayWindow.width = root.width - roomList.width; + secondayWindow.width = root.width - pageStack.get(0).width; secondayWindow.show(); } diff --git a/src/roommanager.cpp b/src/roommanager.cpp index 2cccdf61c..2ecb1569b 100644 --- a/src/roommanager.cpp +++ b/src/roommanager.cpp @@ -107,14 +107,6 @@ void RoomManager::enterRoom(NeoChatRoom *room) void RoomManager::getBack() { - Q_ASSERT(m_currentRoom); - - if (!m_lastCurrentRoom) { - Q_EMIT pushWelcomePage(); - return; - } - - Q_EMIT replaceRoom(m_lastCurrentRoom, QString()); } void RoomManager::openWindow(NeoChatRoom *room) @@ -195,3 +187,22 @@ void RoomManager::reset() m_lastCurrentRoom = nullptr; Q_EMIT currentRoomChanged(); } + +void RoomManager::leaveRoom(NeoChatRoom *room) +{ + // close the room and open the last open room if it exist + // other open welcome page. + if (m_currentRoom && m_currentRoom->id() == room->id()) { + if (!m_lastCurrentRoom) { + Q_EMIT pushWelcomePage(); + return; + } + m_currentRoom = m_lastCurrentRoom; + m_lastCurrentRoom = nullptr; + + Q_EMIT currentRoomChanged(); + Q_EMIT replaceRoom(m_lastCurrentRoom, QString()); + } + + room->forget(); +} diff --git a/src/roommanager.h b/src/roommanager.h index e2fb2a955..f8baab738 100644 --- a/src/roommanager.h +++ b/src/roommanager.h @@ -43,6 +43,9 @@ public: Q_INVOKABLE void openWindow(NeoChatRoom *room); + /// Leave the room and close it if it is open. + Q_INVOKABLE void leaveRoom(NeoChatRoom *room); + /// Getter for the currentRoom property. NeoChatRoom *currentRoom() const;