summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-04 13:40:30 +0200
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-04 13:40:30 +0200
commitb15a04b00a7e43301ce39fad58713920113efed0 (patch)
treeb14067f11fc5b2f9b75905818a045e83134e4d03 /src
parentRetry initial sync forever (#234) (diff)
downloadnheko-b15a04b00a7e43301ce39fad58713920113efed0.tar.xz
Don't open room switcher when another dialog is open
fixes #251
Diffstat (limited to 'src')
-rw-r--r--src/MainWindow.cc122
-rw-r--r--src/SideBarActions.cc50
-rw-r--r--src/TopRoomBar.cc24
-rw-r--r--src/UserInfoWidget.cc27
4 files changed, 129 insertions, 94 deletions
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 <QSettings> #include <QShortcut> +#include <mtx/requests.hpp> + #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<void(const QStringList &invitees)> callback) +{ + if (inviteUsersDialog_.isNull()) { + inviteUsersDialog_ = + QSharedPointer<dialogs::InviteUsers>(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<OverlayModal>( + new OverlayModal(MainWindow::instance(), inviteUsersDialog_.data())); + inviteUsersModal_->setColor(QColor(30, 30, 30, 170)); + } + + inviteUsersModal_->show(); +} + +void +MainWindow::openJoinRoomDialog(std::function<void(const QString &room_id)> callback) +{ + if (joinRoomDialog_.isNull()) { + joinRoomDialog_ = QSharedPointer<dialogs::JoinRoom>(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<OverlayModal>( + new OverlayModal(MainWindow::instance(), joinRoomDialog_.data())); + joinRoomModal_->setColor(QColor(30, 30, 30, 170)); + } + + joinRoomModal_->show(); +} + +void +MainWindow::openCreateRoomDialog( + std::function<void(const mtx::requests::CreateRoom &request)> callback) +{ + if (createRoomDialog_.isNull()) { + createRoomDialog_ = + QSharedPointer<dialogs::CreateRoom>(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<OverlayModal>( + new OverlayModal(MainWindow::instance(), createRoomDialog_.data())); + createRoomModal_->setColor(QColor(30, 30, 30, 170)); + } + + createRoomModal_->show(); +} + +void +MainWindow::openLogoutDialog(std::function<void()> callback) +{ + if (logoutDialog_.isNull()) { + logoutDialog_ = QSharedPointer<dialogs::Logout>(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<OverlayModal>( + 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 <QDebug> #include <QIcon> +#include <mtx/requests.hpp> + #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<dialogs::JoinRoom>(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<OverlayModal>( - 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<dialogs::CreateRoom>(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<OverlayModal>( - 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<dialogs::InviteUsers>(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<OverlayModal>( - 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,34 +89,11 @@ UserInfoWidget::UserInfoWidget(QWidget *parent) // Show the confirmation dialog. connect(logoutButton_, &QPushButton::clicked, this, [this]() { - if (logoutDialog_.isNull()) { - logoutDialog_ = QSharedPointer<dialogs::Logout>(new dialogs::Logout(this)); - connect(logoutDialog_.data(), - SIGNAL(closing(bool)), - this, - SLOT(closeLogoutDialog(bool))); - } - - if (logoutModal_.isNull()) { - logoutModal_ = QSharedPointer<OverlayModal>( - 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) { Q_UNUSED(event);