From b15a04b00a7e43301ce39fad58713920113efed0 Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Sun, 4 Mar 2018 13:40:30 +0200 Subject: [PATCH] Don't open room switcher when another dialog is open fixes #251 --- include/MainWindow.h | 31 ++++++++++ include/SideBarActions.h | 15 ++--- include/TopRoomBar.h | 6 -- include/UserInfoWidget.h | 8 --- src/MainWindow.cc | 122 ++++++++++++++++++++++++++++++++++++++- src/SideBarActions.cc | 50 ++-------------- src/TopRoomBar.cc | 24 +------- src/UserInfoWidget.cc | 27 +-------- 8 files changed, 165 insertions(+), 118 deletions(-) diff --git a/include/MainWindow.h b/include/MainWindow.h index 3aba736e..0c2587e1 100644 --- a/include/MainWindow.h +++ b/include/MainWindow.h @@ -35,8 +35,18 @@ class SnackBar; class TrayIcon; class UserSettings; +namespace mtx { +namespace requests { +struct CreateRoom; +} +} + namespace dialogs { +class CreateRoom; +class InviteUsers; +class JoinRoom; class LeaveRoom; +class Logout; } class MainWindow : public QMainWindow @@ -50,6 +60,11 @@ public: void saveCurrentWindowSize(); void openLeaveRoomDialog(const QString &room_id = ""); + void openInviteUsersDialog(std::function callback); + void openCreateRoomDialog( + std::function callback); + void openJoinRoomDialog(std::function callback); + void openLogoutDialog(std::function callback); protected: void closeEvent(QCloseEvent *event); @@ -113,4 +128,20 @@ private: QSharedPointer leaveRoomModal_; //! Leave room dialog. QSharedPointer leaveRoomDialog_; + //! Invite users modal. + QSharedPointer inviteUsersModal_; + //! Invite users dialog. + QSharedPointer inviteUsersDialog_; + //! Join room modal. + QSharedPointer joinRoomModal_; + //! Join room dialog. + QSharedPointer joinRoomDialog_; + //! Create room modal. + QSharedPointer createRoomModal_; + //! Create room dialog. + QSharedPointer createRoomDialog_; + //! Logout modal. + QSharedPointer logoutModal_; + //! Logout dialog. + QSharedPointer logoutDialog_; }; diff --git a/include/SideBarActions.h b/include/SideBarActions.h index 4b3be213..763f3b2d 100644 --- a/include/SideBarActions.h +++ b/include/SideBarActions.h @@ -8,10 +8,11 @@ #include "FlatButton.h" #include "Menu.h" -#include "dialogs/CreateRoom.h" -#include "dialogs/JoinRoom.h" - -class OverlayModal; +namespace mtx { +namespace requests { +struct CreateRoom; +} +} class SideBarActions : public QWidget { @@ -36,12 +37,6 @@ private: QAction *createRoomAction_; QAction *joinRoomAction_; - QSharedPointer joinRoomModal_; - QSharedPointer joinRoomDialog_; - - QSharedPointer createRoomModal_; - QSharedPointer createRoomDialog_; - FlatButton *settingsBtn_; FlatButton *createRoomBtn_; FlatButton *joinRoomBtn_; diff --git a/include/TopRoomBar.h b/include/TopRoomBar.h index 5b9c58e9..5b2ee506 100644 --- a/include/TopRoomBar.h +++ b/include/TopRoomBar.h @@ -26,9 +26,6 @@ #include #include -#include "dialogs/InviteUsers.h" -#include "dialogs/LeaveRoom.h" - class Avatar; class FlatButton; class Label; @@ -74,9 +71,6 @@ private: FlatButton *settingsBtn_; - QSharedPointer inviteUsersModal_; - QSharedPointer inviteUsersDialog_; - Avatar *avatar_; int buttonSize_; diff --git a/include/UserInfoWidget.h b/include/UserInfoWidget.h index cae9d5b9..5e0ed85b 100644 --- a/include/UserInfoWidget.h +++ b/include/UserInfoWidget.h @@ -20,8 +20,6 @@ #include #include -#include "dialogs/Logout.h" - class Avatar; class FlatButton; class OverlayModal; @@ -46,9 +44,6 @@ protected: void resizeEvent(QResizeEvent *event) override; void paintEvent(QPaintEvent *event) override; -private slots: - void closeLogoutDialog(bool isLoggingOut); - private: Avatar *userAvatar_; @@ -67,8 +62,5 @@ private: QImage avatar_image_; - QSharedPointer logoutModal_; - QSharedPointer logoutDialog_; - int logoutButtonSize_; }; diff --git a/src/MainWindow.cc b/src/MainWindow.cc index ea30b694..4bdd7819 100644 --- a/src/MainWindow.cc +++ b/src/MainWindow.cc @@ -21,6 +21,8 @@ #include #include +#include + #include "ChatPage.h" #include "Config.h" #include "LoadingIndicator.h" @@ -33,7 +35,12 @@ #include "TrayIcon.h" #include "UserSettingsPage.h" #include "WelcomePage.h" + +#include "dialogs/CreateRoom.h" +#include "dialogs/InviteUsers.h" +#include "dialogs/JoinRoom.h" #include "dialogs/LeaveRoom.h" +#include "dialogs/Logout.h" MainWindow *MainWindow::instance_ = nullptr; @@ -255,7 +262,7 @@ MainWindow::openLeaveRoomDialog(const QString &room_id) connect(leaveRoomDialog_.data(), &dialogs::LeaveRoom::closing, this, - [this, &roomToLeave](bool leaving) { + [this, roomToLeave](bool leaving) { leaveRoomModal_->hide(); if (leaving) @@ -291,9 +298,120 @@ MainWindow::showOverlayProgressBar() } } +void +MainWindow::openInviteUsersDialog(std::function callback) +{ + if (inviteUsersDialog_.isNull()) { + inviteUsersDialog_ = + QSharedPointer(new dialogs::InviteUsers(this)); + + connect(inviteUsersDialog_.data(), + &dialogs::InviteUsers::closing, + this, + [this, callback](bool isSending, QStringList invitees) { + inviteUsersModal_->hide(); + + if (isSending && !invitees.isEmpty()) + callback(invitees); + }); + } + + if (inviteUsersModal_.isNull()) { + inviteUsersModal_ = QSharedPointer( + new OverlayModal(MainWindow::instance(), inviteUsersDialog_.data())); + inviteUsersModal_->setColor(QColor(30, 30, 30, 170)); + } + + inviteUsersModal_->show(); +} + +void +MainWindow::openJoinRoomDialog(std::function callback) +{ + if (joinRoomDialog_.isNull()) { + joinRoomDialog_ = QSharedPointer(new dialogs::JoinRoom(this)); + + connect(joinRoomDialog_.data(), + &dialogs::JoinRoom::closing, + this, + [this, callback](bool isJoining, const QString &room) { + joinRoomModal_->hide(); + + if (isJoining && !room.isEmpty()) + callback(room); + }); + } + + if (joinRoomModal_.isNull()) { + joinRoomModal_ = QSharedPointer( + new OverlayModal(MainWindow::instance(), joinRoomDialog_.data())); + joinRoomModal_->setColor(QColor(30, 30, 30, 170)); + } + + joinRoomModal_->show(); +} + +void +MainWindow::openCreateRoomDialog( + std::function callback) +{ + if (createRoomDialog_.isNull()) { + createRoomDialog_ = + QSharedPointer(new dialogs::CreateRoom(this)); + + connect( + createRoomDialog_.data(), + &dialogs::CreateRoom::closing, + this, + [this, callback](bool isCreating, const mtx::requests::CreateRoom &request) { + createRoomModal_->hide(); + + if (isCreating) + callback(request); + }); + } + + if (createRoomModal_.isNull()) { + createRoomModal_ = QSharedPointer( + new OverlayModal(MainWindow::instance(), createRoomDialog_.data())); + createRoomModal_->setColor(QColor(30, 30, 30, 170)); + } + + createRoomModal_->show(); +} + +void +MainWindow::openLogoutDialog(std::function callback) +{ + if (logoutDialog_.isNull()) { + logoutDialog_ = QSharedPointer(new dialogs::Logout(this)); + connect(logoutDialog_.data(), + &dialogs::Logout::closing, + this, + [this, callback](bool logging_out) { + logoutModal_->hide(); + + if (logging_out) + callback(); + }); + } + + if (logoutModal_.isNull()) { + logoutModal_ = QSharedPointer( + new OverlayModal(MainWindow::instance(), logoutDialog_.data())); + logoutModal_->setColor(QColor(30, 30, 30, 170)); + } + + logoutModal_->show(); +} + bool MainWindow::hasActiveDialogs() const { return (!leaveRoomModal_.isNull() && leaveRoomModal_->isVisible()) || - (!progressModal_.isNull() && progressModal_->isVisible()); + (!progressModal_.isNull() && progressModal_->isVisible()) || + (!inviteUsersModal_.isNull() && inviteUsersModal_->isVisible()) || + (!joinRoomModal_.isNull() && joinRoomModal_->isVisible()) || + (!createRoomModal_.isNull() && createRoomModal_->isVisible()) || + (!logoutModal_.isNull() && logoutModal_->isVisible()); } diff --git a/src/SideBarActions.cc b/src/SideBarActions.cc index 0504f4db..665b428b 100644 --- a/src/SideBarActions.cc +++ b/src/SideBarActions.cc @@ -1,6 +1,8 @@ #include #include +#include + #include "Config.h" #include "MainWindow.h" #include "OverlayModal.h" @@ -35,53 +37,13 @@ SideBarActions::SideBarActions(QWidget *parent) joinRoomAction_ = new QAction(tr("Join a room"), this); connect(joinRoomAction_, &QAction::triggered, this, [this]() { - if (joinRoomDialog_.isNull()) { - joinRoomDialog_ = - QSharedPointer(new dialogs::JoinRoom(this)); - - connect(joinRoomDialog_.data(), - &dialogs::JoinRoom::closing, - this, - [this](bool isJoining, const QString &room) { - joinRoomModal_->hide(); - - if (isJoining && !room.isEmpty()) - emit joinRoom(room); - }); - } - - if (joinRoomModal_.isNull()) { - joinRoomModal_ = QSharedPointer( - new OverlayModal(MainWindow::instance(), joinRoomDialog_.data())); - joinRoomModal_->setColor(QColor(30, 30, 30, 170)); - } - - joinRoomModal_->show(); + MainWindow::instance()->openJoinRoomDialog( + [this](const QString &room_id) { emit joinRoom(room_id); }); }); connect(createRoomAction_, &QAction::triggered, this, [this]() { - if (createRoomDialog_.isNull()) { - createRoomDialog_ = - QSharedPointer(new dialogs::CreateRoom(this)); - - connect(createRoomDialog_.data(), - &dialogs::CreateRoom::closing, - this, - [this](bool isCreating, const mtx::requests::CreateRoom &request) { - createRoomModal_->hide(); - - if (isCreating) - emit createRoom(request); - }); - } - - if (createRoomModal_.isNull()) { - createRoomModal_ = QSharedPointer( - new OverlayModal(MainWindow::instance(), createRoomDialog_.data())); - createRoomModal_->setColor(QColor(30, 30, 30, 170)); - } - - createRoomModal_->show(); + MainWindow::instance()->openCreateRoomDialog( + [this](const mtx::requests::CreateRoom &req) { emit createRoom(req); }); }); addMenu_->addAction(createRoomAction_); diff --git a/src/TopRoomBar.cc b/src/TopRoomBar.cc index d5f88044..c4ce3d7d 100644 --- a/src/TopRoomBar.cc +++ b/src/TopRoomBar.cc @@ -92,28 +92,8 @@ TopRoomBar::TopRoomBar(QWidget *parent) inviteUsers_ = new QAction(tr("Invite users"), this); connect(inviteUsers_, &QAction::triggered, this, [this]() { - if (inviteUsersDialog_.isNull()) { - inviteUsersDialog_ = - QSharedPointer(new dialogs::InviteUsers(this)); - - connect(inviteUsersDialog_.data(), - &dialogs::InviteUsers::closing, - this, - [this](bool isSending, QStringList invitees) { - inviteUsersModal_->hide(); - - if (isSending && !invitees.isEmpty()) - emit inviteUsers(invitees); - }); - } - - if (inviteUsersModal_.isNull()) { - inviteUsersModal_ = QSharedPointer( - new OverlayModal(MainWindow::instance(), inviteUsersDialog_.data())); - inviteUsersModal_->setColor(QColor(30, 30, 30, 170)); - } - - inviteUsersModal_->show(); + MainWindow::instance()->openInviteUsersDialog( + [this](const QStringList &invitees) { emit inviteUsers(invitees); }); }); leaveRoom_ = new QAction(tr("Leave room"), this); diff --git a/src/UserInfoWidget.cc b/src/UserInfoWidget.cc index 273a6091..0a00b4cd 100644 --- a/src/UserInfoWidget.cc +++ b/src/UserInfoWidget.cc @@ -28,8 +28,6 @@ UserInfoWidget::UserInfoWidget(QWidget *parent) : QWidget(parent) , display_name_("User") , user_id_("@user:homeserver.org") - , logoutModal_{nullptr} - , logoutDialog_{nullptr} , logoutButtonSize_{20} { setFixedHeight(65); @@ -91,33 +89,10 @@ UserInfoWidget::UserInfoWidget(QWidget *parent) // Show the confirmation dialog. connect(logoutButton_, &QPushButton::clicked, this, [this]() { - if (logoutDialog_.isNull()) { - logoutDialog_ = QSharedPointer(new dialogs::Logout(this)); - connect(logoutDialog_.data(), - SIGNAL(closing(bool)), - this, - SLOT(closeLogoutDialog(bool))); - } - - if (logoutModal_.isNull()) { - logoutModal_ = QSharedPointer( - new OverlayModal(MainWindow::instance(), logoutDialog_.data())); - logoutModal_->setColor(QColor(30, 30, 30, 170)); - } - - logoutModal_->show(); + MainWindow::instance()->openLogoutDialog([this]() { emit logout(); }); }); } -void -UserInfoWidget::closeLogoutDialog(bool isLoggingOut) -{ - logoutModal_->hide(); - - if (isLoggingOut) - emit logout(); -} - void UserInfoWidget::resizeEvent(QResizeEvent *event) {