diff --git a/src/platform/qt/Window.cpp b/src/platform/qt/Window.cpp index 1be4a998c..a224c3ba4 100644 --- a/src/platform/qt/Window.cpp +++ b/src/platform/qt/Window.cpp @@ -972,7 +972,12 @@ void Window::gameStopped() { #endif } - m_controller.reset(); + std::shared_ptr controller; + m_controller.swap(controller); + QTimer::singleShot(0, this, [controller]() { + // Destroy the controller after everything else has cleaned up + Q_UNUSED(controller); + }); detachWidget(); updateTitle(); @@ -2155,11 +2160,6 @@ void Window::setController(CoreController* controller, const QString& fname) { connect(m_controller.get(), &CoreController::started, this, &Window::gameStarted); connect(m_controller.get(), &CoreController::started, GBAApp::app(), &GBAApp::suspendScreensaver); connect(m_controller.get(), &CoreController::stopping, this, &Window::gameStopped); - { - connect(m_controller.get(), &CoreController::stopping, [this]() { - m_controller.reset(); - }); - } connect(m_controller.get(), &CoreController::stopping, GBAApp::app(), &GBAApp::resumeScreensaver); connect(m_controller.get(), &CoreController::paused, this, &Window::updateFrame);