diff --git a/src/duckstation-qt/main.cpp b/src/duckstation-qt/main.cpp index 1d6ef5794..20a869519 100644 --- a/src/duckstation-qt/main.cpp +++ b/src/duckstation-qt/main.cpp @@ -84,7 +84,7 @@ int main(int argc, char* argv[]) if (!ParseCommandLineParameters(app, host_interface.get(), &boot_params)) return EXIT_FAILURE; - std::unique_ptr window = std::make_unique(host_interface.get()); + MainWindow* window = new MainWindow(host_interface.get()); if (!host_interface->Initialize()) { @@ -112,7 +112,6 @@ int main(int argc, char* argv[]) int result = app.exec(); - window.reset(); host_interface->Shutdown(); return result; } diff --git a/src/duckstation-qt/mainwindow.cpp b/src/duckstation-qt/mainwindow.cpp index 0e4d77784..f8d48ff56 100644 --- a/src/duckstation-qt/mainwindow.cpp +++ b/src/duckstation-qt/mainwindow.cpp @@ -82,7 +82,8 @@ MainWindow::MainWindow(QtHostInterface* host_interface) MainWindow::~MainWindow() { Assert(!m_display_widget); - m_host_interface->setMainWindow(nullptr); + if (m_host_interface->getMainWindow() == this) + m_host_interface->setMainWindow(nullptr); Assert(!m_debugger_window); } @@ -562,6 +563,19 @@ std::string MainWindow::getDeviceDiscPath(const QString& title) return ret; } +void MainWindow::recreate() +{ + if (m_emulation_running) + m_host_interface->synchronousPowerOffSystem(); + + close(); + m_host_interface->setMainWindow(nullptr); + + MainWindow* new_main_window = new MainWindow(m_host_interface); + new_main_window->initializeAndShow(); + deleteLater(); +} + void MainWindow::onStartDiscActionTriggered() { std::string path(getDeviceDiscPath(tr("Start Disc"))); diff --git a/src/duckstation-qt/mainwindow.h b/src/duckstation-qt/mainwindow.h index 389fa72f3..7fc4a5685 100644 --- a/src/duckstation-qt/mainwindow.h +++ b/src/duckstation-qt/mainwindow.h @@ -150,6 +150,7 @@ private: void updateMenuSelectedTheme(); void ensureGameListLoaded(); std::string getDeviceDiscPath(const QString& title); + void recreate(); Ui::MainWindow m_ui; diff --git a/src/duckstation-qt/qthostinterface.cpp b/src/duckstation-qt/qthostinterface.cpp index 892bf79d7..5b1fb4a63 100644 --- a/src/duckstation-qt/qthostinterface.cpp +++ b/src/duckstation-qt/qthostinterface.cpp @@ -99,6 +99,8 @@ bool QtHostInterface::Initialize() void QtHostInterface::Shutdown() { stopThread(); + + delete m_main_window; } bool QtHostInterface::initializeOnThread()