diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp index bd1bbce1df..7216b00206 100644 --- a/Source/Core/DolphinQt/MainWindow.cpp +++ b/Source/Core/DolphinQt/MainWindow.cpp @@ -30,6 +30,7 @@ #include #endif +#include "Common/ScopeGuard.h" #include "Common/Version.h" #include "Common/WindowSystemInfo.h" @@ -785,6 +786,11 @@ bool MainWindow::RequestStop() if (SConfig::GetInstance().bConfirmStop) { + if (std::exchange(m_stop_confirm_showing, true)) + return true; + + Common::ScopeGuard confirm_lock([this] { m_stop_confirm_showing = false; }); + const Core::State state = Core::GetState(); // Only pause the game, if NetPlay is not running @@ -798,7 +804,8 @@ bool MainWindow::RequestStop() m_stop_requested ? tr("A shutdown is already in progress. Unsaved data " "may be lost if you stop the current emulation " "before it completes. Force stop?") : - tr("Do you want to stop the current emulation?")); + tr("Do you want to stop the current emulation?"), + QMessageBox::Yes | QMessageBox::No, QMessageBox::NoButton, Qt::ApplicationModal); if (confirm != QMessageBox::Yes) { diff --git a/Source/Core/DolphinQt/MainWindow.h b/Source/Core/DolphinQt/MainWindow.h index 4443b7f651..5c1ae69f72 100644 --- a/Source/Core/DolphinQt/MainWindow.h +++ b/Source/Core/DolphinQt/MainWindow.h @@ -198,6 +198,7 @@ private: GameList* m_game_list; RenderWidget* m_render_widget = nullptr; bool m_rendering_to_main; + bool m_stop_confirm_showing = false; bool m_stop_requested = false; bool m_exit_requested = false; bool m_fullscreen_requested = false;