From 417badc55c9eeb59c43f82439b287b2e00489076 Mon Sep 17 00:00:00 2001 From: LillyJadeKatrin Date: Mon, 9 Jun 2025 06:02:35 -0400 Subject: MainWindow - Avoid excessive emulation state changes Updates the Hardcore Changed callback to only signal EmulationStateChanged if the new Hardcore Mode setting is different from the previous one. --- Source/Core/DolphinQt/MainWindow.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'Source/Core/DolphinQt/MainWindow.cpp') diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp index 3abbf4751d..d15ddef425 100644 --- a/Source/Core/DolphinQt/MainWindow.cpp +++ b/Source/Core/DolphinQt/MainWindow.cpp @@ -2010,9 +2010,14 @@ void MainWindow::ShowAchievementSettings() void MainWindow::OnHardcoreChanged() { - if (AchievementManager::GetInstance().IsHardcoreModeActive()) + bool hardcore_active = AchievementManager::GetInstance().IsHardcoreModeActive(); + if (hardcore_active) Settings::Instance().SetDebugModeEnabled(false); - emit Settings::Instance().EmulationStateChanged(Core::GetState(Core::System::GetInstance())); + // EmulationStateChanged causes several dialogs to redraw, including anything affected by hardcore + // mode. Every dialog that depends on hardcore mode is redrawn by EmulationStateChanged. + if (hardcore_active != m_former_hardcore_setting) + emit Settings::Instance().EmulationStateChanged(Core::GetState(Core::System::GetInstance())); + m_former_hardcore_setting = hardcore_active; } #endif // USE_RETRO_ACHIEVEMENTS -- cgit v1.2.3