diff --git a/include/ChatPage.h b/include/ChatPage.h index 8332225bfda8a7259b6293a5ad22fb0d69e9feec..f64d9589126ad257ee7643c7ec3c72ebfb10446c 100644 --- a/include/ChatPage.h +++ b/include/ChatPage.h @@ -110,8 +110,8 @@ private: // Keeps track of the users currently typing on each room. QMap<QString, QList<QString>> typingUsers_; - QuickSwitcher *quickSwitcher_ = nullptr; - OverlayModal *quickSwitcherModal_ = nullptr; + QSharedPointer<QuickSwitcher> quickSwitcher_; + QSharedPointer<OverlayModal> quickSwitcherModal_; // Matrix Client API provider. QSharedPointer<MatrixClient> client_; diff --git a/include/EmojiPickButton.h b/include/EmojiPickButton.h index 041e25a6910044b7365cf4fdf1b9efc914db03b3..d4226165e536768c9f312b2b24e90dcdc951d6f3 100644 --- a/include/EmojiPickButton.h +++ b/include/EmojiPickButton.h @@ -43,5 +43,5 @@ private: // Horizontal distance from panel's bottom right corner. int horizontal_distance_ = 70; - EmojiPanel *panel_; + QSharedPointer<EmojiPanel> panel_; }; diff --git a/include/MainWindow.h b/include/MainWindow.h index 85cd5a707c177a1947cdb59a03a2b91bc17e41d0..a7a2b2e6e304e787b13a1396bf3f1d29f8df2c5e 100644 --- a/include/MainWindow.h +++ b/include/MainWindow.h @@ -83,8 +83,8 @@ private: ChatPage *chat_page_; // Used to hide undefined states between page transitions. - OverlayModal *progress_modal_; - LoadingIndicator *spinner_; + QSharedPointer<OverlayModal> progressModal_; + QSharedPointer<LoadingIndicator> spinner_; // Matrix Client API provider. QSharedPointer<MatrixClient> client_; diff --git a/include/RoomList.h b/include/RoomList.h index c2f4255d2fcafe77ff78d94610101fa469f1051e..d7b201f19fc9091e7527e9e2e9b403c9a5c07b76 100644 --- a/include/RoomList.h +++ b/include/RoomList.h @@ -76,8 +76,8 @@ private: OverlayModal *joinRoomModal_; JoinRoomDialog *joinRoomDialog_; - OverlayModal *leaveRoomModal; - LeaveRoomDialog *leaveRoomDialog_; + QSharedPointer<OverlayModal> leaveRoomModal_; + QSharedPointer<LeaveRoomDialog> leaveRoomDialog_; QMap<QString, QSharedPointer<RoomInfoListItem>> rooms_; diff --git a/include/TopRoomBar.h b/include/TopRoomBar.h index 5d8b394ec57c37fa8456593ebf769c8c6d9c407e..2c7af2188a40d6bbf93f40e61d43b248d81bd575 100644 --- a/include/TopRoomBar.h +++ b/include/TopRoomBar.h @@ -77,8 +77,8 @@ private: FlatButton *settingsBtn_; - OverlayModal *leaveRoomModal; - LeaveRoomDialog *leaveRoomDialog_; + QSharedPointer<OverlayModal> leaveRoomModal_; + QSharedPointer<LeaveRoomDialog> leaveRoomDialog_; Avatar *avatar_; diff --git a/include/UserInfoWidget.h b/include/UserInfoWidget.h index 25dc226559333e3a7feba20fd80fbfac42749650..b2c7b87662551cba8bdd03f4d71fb5d06dcf549b 100644 --- a/include/UserInfoWidget.h +++ b/include/UserInfoWidget.h @@ -68,8 +68,8 @@ private: QImage avatar_image_; - OverlayModal *logoutModal_; - LogoutDialog *logoutDialog_; + QSharedPointer<OverlayModal> logoutModal_; + QSharedPointer<LogoutDialog> logoutDialog_; int logoutButtonSize_; }; diff --git a/src/ChatPage.cc b/src/ChatPage.cc index 0800fe3286fc855d3d7e20c38c9484208a32e174..dbffc6d0b40e9d4f1c08df497d0d4c579c4dceb3 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc @@ -572,21 +572,26 @@ ChatPage::keyPressEvent(QKeyEvent *event) void ChatPage::showQuickSwitcher() { - if (quickSwitcher_ == nullptr) { - quickSwitcher_ = new QuickSwitcher(this); + if (quickSwitcher_.isNull()) { + quickSwitcher_ = QSharedPointer<QuickSwitcher>( + new QuickSwitcher(this), + [=](QuickSwitcher *switcher) { switcher->deleteLater(); }); - connect(quickSwitcher_, + connect(quickSwitcher_.data(), &QuickSwitcher::roomSelected, room_list_, &RoomList::highlightSelectedRoom); - connect(quickSwitcher_, &QuickSwitcher::closing, this, [=]() { - if (this->quickSwitcherModal_ != nullptr) + + connect(quickSwitcher_.data(), &QuickSwitcher::closing, this, [=]() { + if (!this->quickSwitcherModal_.isNull()) this->quickSwitcherModal_->fadeOut(); }); } - if (quickSwitcherModal_ == nullptr) { - quickSwitcherModal_ = new OverlayModal(MainWindow::instance(), quickSwitcher_); + if (quickSwitcherModal_.isNull()) { + quickSwitcherModal_ = QSharedPointer<OverlayModal>( + new OverlayModal(MainWindow::instance(), quickSwitcher_.data()), + [=](OverlayModal *modal) { modal->deleteLater(); }); quickSwitcherModal_->setDuration(0); quickSwitcherModal_->setColor(QColor(30, 30, 30, 170)); } diff --git a/src/EmojiPickButton.cc b/src/EmojiPickButton.cc index f3e30661189215aa2fa753e4c6cecf4012978a1b..4f7dd59e27fd654a08539f997e5f4dd16ad0f7fa 100644 --- a/src/EmojiPickButton.cc +++ b/src/EmojiPickButton.cc @@ -30,9 +30,10 @@ EmojiPickButton::enterEvent(QEvent *e) { Q_UNUSED(e); - if (panel_ == nullptr) { - panel_ = new EmojiPanel(this); - connect(panel_, &EmojiPanel::emojiSelected, this, &EmojiPickButton::emojiSelected); + if (panel_.isNull()) { + panel_ = QSharedPointer<EmojiPanel>(new EmojiPanel(this)); + connect( + panel_.data(), &EmojiPanel::emojiSelected, this, &EmojiPickButton::emojiSelected); } QPoint pos(rect().x(), rect().y()); diff --git a/src/MainWindow.cc b/src/MainWindow.cc index 43f4a9491a978621dbb77bb2c4aff9f5622a6fbb..8072668356734e9e1a9c6a71d77f5696fd057a98 100644 --- a/src/MainWindow.cc +++ b/src/MainWindow.cc @@ -15,8 +15,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "MainWindow.h" #include "Config.h" +#include "MainWindow.h" #include <QApplication> #include <QLayout> @@ -29,7 +29,7 @@ MainWindow *MainWindow::instance_ = nullptr; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) - , progress_modal_{ nullptr } + , progressModal_{ nullptr } , spinner_{ nullptr } { QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); @@ -132,18 +132,14 @@ MainWindow::removeOverlayProgressBar() connect(timer, &QTimer::timeout, [=]() { timer->deleteLater(); - if (progress_modal_ != nullptr) { - progress_modal_->deleteLater(); - progress_modal_->fadeOut(); - } - - if (spinner_ != nullptr) - spinner_->deleteLater(); + if (!progressModal_.isNull()) + progressModal_->fadeOut(); - spinner_->stop(); + if (!spinner_.isNull()) + spinner_->stop(); - progress_modal_ = nullptr; - spinner_ = nullptr; + progressModal_.reset(); + spinner_.reset(); }); timer->start(500); @@ -166,18 +162,22 @@ MainWindow::showChatPage(QString userid, QString homeserver, QString token) QTimer::singleShot( modalOpacityDuration + 100, this, [=]() { pageStack_->setCurrentWidget(chat_page_); }); - if (spinner_ == nullptr) { - spinner_ = new LoadingIndicator(this); + if (spinner_.isNull()) { + spinner_ = QSharedPointer<LoadingIndicator>( + new LoadingIndicator(this), + [=](LoadingIndicator *indicator) { indicator->deleteLater(); }); spinner_->setColor("#acc7dc"); spinner_->setFixedHeight(120); spinner_->setFixedWidth(120); spinner_->start(); } - if (progress_modal_ == nullptr) { - progress_modal_ = new OverlayModal(this, spinner_); - progress_modal_->fadeIn(); - progress_modal_->setDuration(modalOpacityDuration); + if (progressModal_.isNull()) { + progressModal_ = + QSharedPointer<OverlayModal>(new OverlayModal(this, spinner_.data()), + [=](OverlayModal *modal) { modal->deleteLater(); }); + progressModal_->fadeIn(); + progressModal_->setDuration(modalOpacityDuration); } login_page_->reset(); diff --git a/src/RoomList.cc b/src/RoomList.cc index 0383be6e916a3a0a0465ebaa29482cdd575d5235..90d8b83c268a104a22629c574c06f3e93717bfe7 100644 --- a/src/RoomList.cc +++ b/src/RoomList.cc @@ -168,16 +168,23 @@ RoomList::setInitialRooms(const QMap<QString, QSharedPointer<RoomSettings>> &set void RoomList::openLeaveRoomDialog(const QString &room_id) { - leaveRoomDialog_ = new LeaveRoomDialog(this); - connect(leaveRoomDialog_, &LeaveRoomDialog::closing, this, [=](bool leaving) { - closeLeaveRoomDialog(leaving, room_id); - }); + if (leaveRoomDialog_.isNull()) { + leaveRoomDialog_ = QSharedPointer<LeaveRoomDialog>(new LeaveRoomDialog(this)); - leaveRoomModal = new OverlayModal(MainWindow::instance(), leaveRoomDialog_); - leaveRoomModal->setDuration(0); - leaveRoomModal->setColor(QColor(55, 55, 55, 170)); + connect(leaveRoomDialog_.data(), + &LeaveRoomDialog::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(); + leaveRoomModal_->fadeIn(); } void @@ -266,7 +273,7 @@ RoomList::closeJoinRoomDialog(bool isJoining, QString roomAlias) void RoomList::closeLeaveRoomDialog(bool leaving, const QString &room_id) { - leaveRoomModal->fadeOut(); + leaveRoomModal_->fadeOut(); if (leaving) { client_->leaveRoom(room_id); diff --git a/src/TopRoomBar.cc b/src/TopRoomBar.cc index f8a7e600efd6a1bb915f40b38e35b334bfa9f655..3f93cad336ff7f2958fb2a1f6ff8e6eff70e6ccb 100644 --- a/src/TopRoomBar.cc +++ b/src/TopRoomBar.cc @@ -86,15 +86,24 @@ TopRoomBar::TopRoomBar(QWidget *parent) leaveRoom_ = new QAction(tr("Leave room"), this); connect(leaveRoom_, &QAction::triggered, this, [=]() { - leaveRoomDialog_ = new LeaveRoomDialog(this); - connect( - leaveRoomDialog_, SIGNAL(closing(bool)), this, SLOT(closeLeaveRoomDialog(bool))); - - leaveRoomModal = new OverlayModal(MainWindow::instance(), leaveRoomDialog_); - leaveRoomModal->setDuration(100); - leaveRoomModal->setColor(QColor(55, 55, 55, 170)); - - leaveRoomModal->fadeIn(); + if (leaveRoomDialog_.isNull()) { + leaveRoomDialog_ = + QSharedPointer<LeaveRoomDialog>(new LeaveRoomDialog(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(); }); menu_->addAction(toggleNotifications_); @@ -117,7 +126,7 @@ TopRoomBar::TopRoomBar(QWidget *parent) void TopRoomBar::closeLeaveRoomDialog(bool leaving) { - leaveRoomModal->fadeOut(); + leaveRoomModal_->fadeOut(); if (leaving) { emit leaveRoom(); diff --git a/src/UserInfoWidget.cc b/src/UserInfoWidget.cc index b65329da5d1ee6ee094eea6780ce13ef06400daf..09a75a3b205fcc154c488f6672cc76f57f409f96 100644 --- a/src/UserInfoWidget.cc +++ b/src/UserInfoWidget.cc @@ -93,18 +93,19 @@ UserInfoWidget::UserInfoWidget(QWidget *parent) // Show the confirmation dialog. connect(logoutButton_, &QPushButton::clicked, this, [=]() { - if (logoutDialog_ == nullptr) { - logoutDialog_ = new LogoutDialog(this); - connect(logoutDialog_, + if (logoutDialog_.isNull()) { + logoutDialog_ = QSharedPointer<LogoutDialog>(new LogoutDialog(this)); + connect(logoutDialog_.data(), SIGNAL(closing(bool)), this, SLOT(closeLogoutDialog(bool))); } - if (logoutModal_ == nullptr) { - logoutModal_ = new OverlayModal(MainWindow::instance(), logoutDialog_); + if (logoutModal_.isNull()) { + logoutModal_ = QSharedPointer<OverlayModal>( + new OverlayModal(MainWindow::instance(), logoutDialog_.data())); logoutModal_->setDuration(0); - logoutModal_->setColor(QColor(55, 55, 55, 170)); + logoutModal_->setColor(QColor(30, 30, 30, 170)); } logoutModal_->fadeIn();