summary refs log tree commit diff
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
parentRetry initial sync forever (#234) (diff)
downloadnheko-b15a04b00a7e43301ce39fad58713920113efed0.tar.xz
Don't open room switcher when another dialog is open
fixes #251
-rw-r--r--include/MainWindow.h31
-rw-r--r--include/SideBarActions.h15
-rw-r--r--include/TopRoomBar.h6
-rw-r--r--include/UserInfoWidget.h8
-rw-r--r--src/MainWindow.cc122
-rw-r--r--src/SideBarActions.cc50
-rw-r--r--src/TopRoomBar.cc24
-rw-r--r--src/UserInfoWidget.cc27
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<void(const QStringList &invitees)> callback);
+        void openCreateRoomDialog(
+          std::function<void(const mtx::requests::CreateRoom &request)> callback);
+        void openJoinRoomDialog(std::function<void(const QString &room_id)> callback);
+        void openLogoutDialog(std::function<void()> callback);
 
 protected:
         void closeEvent(QCloseEvent *event);
@@ -113,4 +128,20 @@ private:
         QSharedPointer<OverlayModal> leaveRoomModal_;
         //! Leave room dialog.
         QSharedPointer<dialogs::LeaveRoom> leaveRoomDialog_;
+        //! Invite users modal.
+        QSharedPointer<OverlayModal> inviteUsersModal_;
+        //! Invite users dialog.
+        QSharedPointer<dialogs::InviteUsers> inviteUsersDialog_;
+        //! Join room modal.
+        QSharedPointer<OverlayModal> joinRoomModal_;
+        //! Join room dialog.
+        QSharedPointer<dialogs::JoinRoom> joinRoomDialog_;
+        //! Create room modal.
+        QSharedPointer<OverlayModal> createRoomModal_;
+        //! Create room dialog.
+        QSharedPointer<dialogs::CreateRoom> createRoomDialog_;
+        //! Logout modal.
+        QSharedPointer<OverlayModal> logoutModal_;
+        //! Logout dialog.
+        QSharedPointer<dialogs::Logout> 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<OverlayModal> joinRoomModal_;
-        QSharedPointer<dialogs::JoinRoom> joinRoomDialog_;
-
-        QSharedPointer<OverlayModal> createRoomModal_;
-        QSharedPointer<dialogs::CreateRoom> 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 <QSharedPointer>
 #include <QVBoxLayout>
 
-#include "dialogs/InviteUsers.h"
-#include "dialogs/LeaveRoom.h"
-
 class Avatar;
 class FlatButton;
 class Label;
@@ -74,9 +71,6 @@ private:
 
         FlatButton *settingsBtn_;
 
-        QSharedPointer<OverlayModal> inviteUsersModal_;
-        QSharedPointer<dialogs::InviteUsers> 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 <QLabel>
 #include <QLayout>
 
-#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<OverlayModal> logoutModal_;
-        QSharedPointer<dialogs::Logout> 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 <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);