From 01442d193f6b87d026f797768527ba4802671d6d Mon Sep 17 00:00:00 2001 From: Kyzentun Date: Sun, 24 Aug 2014 03:21:01 -0600 Subject: [PATCH] Fixed SwitchThemeAndLanguage to run lua scripts when reloading the theme. Removed ForceThemeReload param from GameLoop::ChangeTheme. --- src/GameLoop.cpp | 8 ++++---- src/GameLoop.h | 2 +- src/ScreenOptionsMaster.cpp | 3 +-- src/ThemeManager.cpp | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/GameLoop.cpp b/src/GameLoop.cpp index 4fbe074a5d..98976a2d91 100644 --- a/src/GameLoop.cpp +++ b/src/GameLoop.cpp @@ -115,12 +115,10 @@ static void CheckFocus() // On the next update, change themes, and load sNewScreen. static RString g_NewTheme; -static bool g_bForceThemeReload; static RString g_NewGame; -void GameLoop::ChangeTheme( const RString &sNewTheme, bool bForced ) +void GameLoop::ChangeTheme(const RString &sNewTheme) { g_NewTheme = sNewTheme; - g_bForceThemeReload = bForced; } void GameLoop::ChangeGame(const RString& new_game, const RString& new_theme) @@ -142,7 +140,9 @@ namespace // In case the previous theme overloaded class bindings, reinitialize them. LUA->RegisterTypes(); - THEME->SwitchThemeAndLanguage( g_NewTheme, THEME->GetCurLanguage(), PREFSMAN->m_bPseudoLocalize, g_bForceThemeReload ); + // We always need to force the theme to reload because we cleared the lua + // state by calling RegisterTypes so the scripts in Scripts/ need to run. + THEME->SwitchThemeAndLanguage( g_NewTheme, THEME->GetCurLanguage(), PREFSMAN->m_bPseudoLocalize, true ); PREFSMAN->m_sTheme.Set( g_NewTheme ); // Apply the new window title, icon and aspect ratio. diff --git a/src/GameLoop.h b/src/GameLoop.h index df59a0146e..b95dee6dae 100644 --- a/src/GameLoop.h +++ b/src/GameLoop.h @@ -5,7 +5,7 @@ namespace GameLoop { void RunGameLoop(); void SetUpdateRate( float fUpdateRate ); - void ChangeTheme( const RString &sNewTheme, bool bForced = false ); + void ChangeTheme(const RString &sNewTheme); void ChangeGame(const RString& new_game, const RString& new_theme= ""); void StartConcurrentRendering(); void FinishConcurrentRendering(); diff --git a/src/ScreenOptionsMaster.cpp b/src/ScreenOptionsMaster.cpp index 27b3b70c77..b44c0a80dc 100644 --- a/src/ScreenOptionsMaster.cpp +++ b/src/ScreenOptionsMaster.cpp @@ -127,8 +127,7 @@ void ScreenOptionsMaster::HandleScreenMessage( const ScreenMessage SM ) /* If the resolution or aspect ratio changes, always reload the theme. * Otherwise, only reload it if it changed. */ RString sNewTheme = PREFSMAN->m_sTheme.Get(); - bool bForceThemeReload = !!(m_iChangeMask & OPT_APPLY_ASPECT_RATIO) || !!(m_iChangeMask & OPT_APPLY_GRAPHICS); - GameLoop::ChangeTheme( sNewTheme, bForceThemeReload ); + GameLoop::ChangeTheme(sNewTheme); } if( m_iChangeMask & OPT_SAVE_PREFERENCES ) diff --git a/src/ThemeManager.cpp b/src/ThemeManager.cpp index 8a9d0625de..9f5e6bc6e5 100644 --- a/src/ThemeManager.cpp +++ b/src/ThemeManager.cpp @@ -412,7 +412,7 @@ void ThemeManager::SwitchThemeAndLanguage( const RString &sThemeName_, const RSt // Clear the theme path cache. This caches language-specific graphic paths, // so do this even if only the language is changing. ClearThemePathCache(); - if( bThemeChanging ) + if(bThemeChanging || bForceThemeReload) { #if !defined(SMPACKAGE) // reload common sounds