qt: prevent reentrant shutdown
This commit is contained in:
		| @@ -1785,9 +1785,9 @@ void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t | |||||||
|     OnStartGame(); |     OnStartGame(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void GMainWindow::OnShutdownBegin() { | bool GMainWindow::OnShutdownBegin() { | ||||||
|     if (!emulation_running) { |     if (!emulation_running) { | ||||||
|         return; |         return false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (ui->action_Fullscreen->isChecked()) { |     if (ui->action_Fullscreen->isChecked()) { | ||||||
| @@ -1799,6 +1799,10 @@ void GMainWindow::OnShutdownBegin() { | |||||||
|     // Disable unlimited frame rate |     // Disable unlimited frame rate | ||||||
|     Settings::values.use_speed_limit.SetValue(true); |     Settings::values.use_speed_limit.SetValue(true); | ||||||
|  |  | ||||||
|  |     if (system->IsShuttingDown()) { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     system->SetShuttingDown(true); |     system->SetShuttingDown(true); | ||||||
|     discord_rpc->Pause(); |     discord_rpc->Pause(); | ||||||
|  |  | ||||||
| @@ -1817,6 +1821,8 @@ void GMainWindow::OnShutdownBegin() { | |||||||
|     ui->action_Pause->setEnabled(false); |     ui->action_Pause->setEnabled(false); | ||||||
|     ui->action_Restart->setEnabled(false); |     ui->action_Restart->setEnabled(false); | ||||||
|     ui->action_Stop->setEnabled(false); |     ui->action_Stop->setEnabled(false); | ||||||
|  |  | ||||||
|  |     return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| void GMainWindow::OnShutdownBeginDialog() { | void GMainWindow::OnShutdownBeginDialog() { | ||||||
| @@ -3003,8 +3009,9 @@ void GMainWindow::OnStopGame() { | |||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     OnShutdownBegin(); |     if (OnShutdownBegin()) { | ||||||
|         OnShutdownBeginDialog(); |         OnShutdownBeginDialog(); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| void GMainWindow::OnLoadComplete() { | void GMainWindow::OnLoadComplete() { | ||||||
|   | |||||||
| @@ -336,7 +336,7 @@ private slots: | |||||||
|     void OnReinitializeKeys(ReinitializeKeyBehavior behavior); |     void OnReinitializeKeys(ReinitializeKeyBehavior behavior); | ||||||
|     void OnLanguageChanged(const QString& locale); |     void OnLanguageChanged(const QString& locale); | ||||||
|     void OnMouseActivity(); |     void OnMouseActivity(); | ||||||
|     void OnShutdownBegin(); |     bool OnShutdownBegin(); | ||||||
|     void OnShutdownBeginDialog(); |     void OnShutdownBeginDialog(); | ||||||
|     void OnEmulationStopped(); |     void OnEmulationStopped(); | ||||||
|     void OnEmulationStopTimeExpired(); |     void OnEmulationStopTimeExpired(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user