diff --git a/src/ChatPage.cc b/src/ChatPage.cc
index 78435713..ba7e2797 100644
--- a/src/ChatPage.cc
+++ b/src/ChatPage.cc
@@ -144,8 +144,6 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client,
connect(user_info_widget_, SIGNAL(logout()), client_.data(), SLOT(logout()));
connect(client_.data(), SIGNAL(loggedOut()), this, SLOT(logout()));
- connect(
- top_bar_, &TopRoomBar::leaveRoom, this, [=]() { client_->leaveRoom(current_room_); });
connect(top_bar_, &TopRoomBar::inviteUsers, this, [=](QStringList users) {
for (int ii = 0; ii < users.size(); ++ii) {
QTimer::singleShot(ii * 1000, this, [=]() {
diff --git a/src/MainWindow.cc b/src/MainWindow.cc
index 9437b401..2ada704a 100644
--- a/src/MainWindow.cc
+++ b/src/MainWindow.cc
@@ -33,6 +33,7 @@
#include "TrayIcon.h"
#include "UserSettingsPage.h"
#include "WelcomePage.h"
+#include "dialogs/LeaveRoom.h"
MainWindow *MainWindow::instance_ = nullptr;
@@ -262,4 +263,24 @@ MainWindow::hasActiveUser()
settings.contains("auth/user_id");
}
-MainWindow::~MainWindow() {}
+void
+MainWindow::openLeaveRoomDialog(const QString &room_id)
+{
+ auto roomToLeave = room_id.isEmpty() ? chat_page_->currentRoom() : room_id;
+
+ leaveRoomDialog_ = QSharedPointer<dialogs::LeaveRoom>(new dialogs::LeaveRoom(this));
+
+ connect(leaveRoomDialog_.data(), &dialogs::LeaveRoom::closing, this, [=](bool leaving) {
+ leaveRoomModal_->fadeOut();
+
+ if (leaving)
+ client_->leaveRoom(roomToLeave);
+ });
+
+ leaveRoomModal_ =
+ QSharedPointer<OverlayModal>(new OverlayModal(this, leaveRoomDialog_.data()));
+ leaveRoomModal_->setDuration(0);
+ leaveRoomModal_->setColor(QColor(30, 30, 30, 170));
+
+ leaveRoomModal_->fadeIn();
+}
diff --git a/src/RoomList.cc b/src/RoomList.cc
index 8d4cf30b..099e5b1c 100644
--- a/src/RoomList.cc
+++ b/src/RoomList.cc
@@ -88,7 +88,9 @@ RoomList::addRoom(const QSharedPointer<RoomSettings> &settings,
{
auto room_item = new RoomInfoListItem(settings, state, room_id, scrollArea_);
connect(room_item, &RoomInfoListItem::clicked, this, &RoomList::highlightSelectedRoom);
- connect(room_item, &RoomInfoListItem::leaveRoom, this, &RoomList::openLeaveRoomDialog);
+ connect(room_item, &RoomInfoListItem::leaveRoom, this, [=](const QString &room_id) {
+ MainWindow::instance()->openLeaveRoomDialog(room_id);
+ });
rooms_.emplace(room_id, QSharedPointer<RoomInfoListItem>(room_item));
@@ -190,28 +192,6 @@ RoomList::setInitialRooms(const std::map<QString, QSharedPointer<RoomSettings>>
}
void
-RoomList::openLeaveRoomDialog(const QString &room_id)
-{
- if (leaveRoomDialog_.isNull()) {
- leaveRoomDialog_ = QSharedPointer<dialogs::LeaveRoom>(new dialogs::LeaveRoom(this));
-
- connect(leaveRoomDialog_.data(),
- &dialogs::LeaveRoom::closing,
- this,
- [=](bool leaving) { closeLeaveRoomDialog(leaving, room_id); });
- }
-
- if (leaveRoomModal_.isNull()) {
- leaveRoomModal_ = QSharedPointer<OverlayModal>(
- new OverlayModal(MainWindow::instance(), leaveRoomDialog_.data()));
- leaveRoomModal_->setDuration(0);
- leaveRoomModal_->setColor(QColor(30, 30, 30, 170));
- }
-
- leaveRoomModal_->fadeIn();
-}
-
-void
RoomList::sync(const std::map<QString, QSharedPointer<RoomState>> &states,
const std::map<QString, QSharedPointer<RoomSettings>> &settings)
@@ -363,15 +343,6 @@ RoomList::closeJoinRoomDialog(bool isJoining, QString roomAlias)
}
void
-RoomList::closeLeaveRoomDialog(bool leaving, const QString &room_id)
-{
- leaveRoomModal_->fadeOut();
-
- if (leaving)
- client_->leaveRoom(room_id);
-}
-
-void
RoomList::setFilterRooms(bool isFilteringEnabled)
{
for (int i = 0; i < contentsLayout_->count(); i++) {
diff --git a/src/TopRoomBar.cc b/src/TopRoomBar.cc
index d34e59ad..d3ae307f 100644
--- a/src/TopRoomBar.cc
+++ b/src/TopRoomBar.cc
@@ -119,24 +119,7 @@ TopRoomBar::TopRoomBar(QWidget *parent)
leaveRoom_ = new QAction(tr("Leave room"), this);
connect(leaveRoom_, &QAction::triggered, this, [=]() {
- if (leaveRoomDialog_.isNull()) {
- leaveRoomDialog_ =
- QSharedPointer<dialogs::LeaveRoom>(new dialogs::LeaveRoom(this));
-
- connect(leaveRoomDialog_.data(),
- SIGNAL(closing(bool)),
- this,
- SLOT(closeLeaveRoomDialog(bool)));
- }
-
- if (leaveRoomModal_.isNull()) {
- leaveRoomModal_ = QSharedPointer<OverlayModal>(
- new OverlayModal(MainWindow::instance(), leaveRoomDialog_.data()));
- leaveRoomModal_->setDuration(0);
- leaveRoomModal_->setColor(QColor(30, 30, 30, 170));
- }
-
- leaveRoomModal_->fadeIn();
+ MainWindow::instance()->openLeaveRoomDialog();
});
menu_->addAction(toggleNotifications_);
@@ -161,16 +144,6 @@ TopRoomBar::TopRoomBar(QWidget *parent)
}
void
-TopRoomBar::closeLeaveRoomDialog(bool leaving)
-{
- leaveRoomModal_->fadeOut();
-
- if (leaving) {
- emit leaveRoom();
- }
-}
-
-void
TopRoomBar::updateRoomAvatarFromName(const QString &name)
{
avatar_->setLetter(utils::firstChar(name));
|