From e622f1d61e8d1b730845ef611d8e9d9d4598cd6d Mon Sep 17 00:00:00 2001 From: Reinder Feenstra Date: Thu, 5 Sep 2024 23:22:34 +0200 Subject: [PATCH] fix: load world dialog wasn't closed if connection was lost --- client/src/mainwindow.cpp | 26 +++++++++++++++++++------- client/src/mainwindow.hpp | 2 ++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/client/src/mainwindow.cpp b/client/src/mainwindow.cpp index eaba884b..4416318b 100644 --- a/client/src/mainwindow.cpp +++ b/client/src/mainwindow.cpp @@ -761,13 +761,21 @@ void MainWindow::loadWorld() if(!m_connection) return; - std::unique_ptr d = std::make_unique(m_connection, this); - if(d->exec() == QDialog::Accepted) - { - Method* method = m_connection->traintastic()->getMethod("load_world"); - if(Q_LIKELY(method)) - method->call(d->uuid()); - } + m_loadWorldDialog = std::make_unique(m_connection, this); + connect(m_loadWorldDialog.get(), &WorldListDialog::finished, + [this](int result) + { + if(result == QDialog::Accepted) + { + if(Method* method = m_connection->traintastic()->getMethod("load_world")) /*[[likely]]*/ + { + method->call(m_loadWorldDialog->uuid()); + } + } + m_loadWorldDialog.release()->deleteLater(); + }); + m_loadWorldDialog->setModal(true); + m_loadWorldDialog->show(); } void MainWindow::toggleFullScreen() @@ -970,6 +978,10 @@ void MainWindow::connectionStateChanged() if(m_connection && m_connection->state() == Connection::State::Disconnected) { m_connection.reset(); + if(m_loadWorldDialog) + { + m_loadWorldDialog->reject(); + } if(m_serverLog) { delete m_serverLog; diff --git a/client/src/mainwindow.hpp b/client/src/mainwindow.hpp index 34a5a814..307d1459 100644 --- a/client/src/mainwindow.hpp +++ b/client/src/mainwindow.hpp @@ -46,6 +46,7 @@ class NewWorldWizard; class IntroductionWizard; class AddInterfaceWizard; class NewBoardWizard; +class WorldListDialog; class MainWindow final : public QMainWindow { @@ -55,6 +56,7 @@ class MainWindow final : public QMainWindow std::shared_ptr m_connection; ObjectPtr m_world; bool m_newWorldRequested = false; + std::unique_ptr m_loadWorldDialog; std::unique_ptr m_newWorldWizard; int m_clockRequest; ObjectPtr m_clock;