Merge pull request #13746 from LillyJadeKatrin/retroachievements-hardcore-changed

MainWindow - Avoid excessive emulation state changes
This commit is contained in:
JMC47
2025-06-10 17:32:04 -04:00
committed by GitHub
2 changed files with 8 additions and 2 deletions

View File

@ -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

View File

@ -267,6 +267,7 @@ private:
#ifdef USE_RETRO_ACHIEVEMENTS
AchievementsWindow* m_achievements_window = nullptr;
Config::ConfigChangedCallbackID m_config_changed_callback_id;
bool m_former_hardcore_setting = false;
#endif // USE_RETRO_ACHIEVEMENTS
AssemblerWidget* m_assembler_widget;