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;