From 2c9678ca659178a5caf98f47a5ceac4f6ca58ab8 Mon Sep 17 00:00:00 2001 From: Mark Cannon Date: Fri, 7 Jan 2011 23:41:23 -0500 Subject: [PATCH] fix PrefsManager init list not being in order, add hack to ThemeManager to make GetThemeName() work intuitively for Scripts dirs --- src/PrefsManager.cpp | 2 +- src/ThemeManager.cpp | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/PrefsManager.cpp b/src/PrefsManager.cpp index f92260adcf..fae848edef 100644 --- a/src/PrefsManager.cpp +++ b/src/PrefsManager.cpp @@ -157,7 +157,6 @@ PrefsManager::PrefsManager() : m_sAnnouncer ( "Announcer", "" ), m_sTheme ( "Theme", SpecialFiles::BASE_THEME_NAME ), - m_sDefaultTheme ( "DefaultTheme", "default" ), m_sDefaultModifiers ( "DefaultModifiers", "" ), m_bWindowed ( "Windowed", true ), @@ -257,6 +256,7 @@ PrefsManager::PrefsManager() : m_sAdditionalSongFolders ( "AdditionalSongFolders", "" ), m_sAdditionalCourseFolders ( "AdditionalCourseFolders", "" ), m_sAdditionalFolders ( "AdditionalFolders", "" ), + m_sDefaultTheme ( "DefaultTheme", "default" ), m_sLastSeenVideoDriver ( "LastSeenVideoDriver", "" ), m_sVideoRenderers ( "VideoRenderers", "" ), // StepMania.cpp sets these on first run: m_bSmoothLines ( "SmoothLines", false ), diff --git a/src/ThemeManager.cpp b/src/ThemeManager.cpp index f0af2ff534..b691d3d7e7 100644 --- a/src/ThemeManager.cpp +++ b/src/ThemeManager.cpp @@ -97,7 +97,7 @@ void ThemeManager::Subscribe( IThemeMetric *p ) { g_Subscribers.Subscribe( p ); - // It's ThemeManager's responsibility to make sure all of it's subscribers + // It's ThemeManager's responsibility to make sure all of its subscribers // are updated with current data. If a metric is created after // a theme is loaded, ThemeManager should update it right away (not just // when the theme changes). @@ -450,11 +450,21 @@ void ThemeManager::RunLuaScripts( const RString &sMask ) { /* Run all script files with the given mask in Lua for all themes. Start * from the deepest fallback theme and work outwards. */ + + /* TODO: verify whether this final check is necessary. */ + const RString sCurThemeName = m_sCurThemeName; + deque::const_iterator iter = g_vThemes.end(); do { --iter; - const RString &sThemeDir = GetThemeDirFromName( iter->sThemeName ); + + /* HACK: pretend to be the theme these are under by setting m_sCurThemeName + * to the name of the theme whose scripts are currently running; if those + * scripts call GetThemeName(), it'll return the theme the script is in. */ + + m_sCurThemeName = iter->sThemeName; + const RString &sThemeDir = GetThemeDirFromName( m_sCurThemeName ); vector asElementPaths; // get files from directories @@ -489,6 +499,13 @@ void ThemeManager::RunLuaScripts( const RString &sMask ) } } while( iter != g_vThemes.begin() ); + + /* TODO: verify whether this final check is necessary. */ + if( sCurThemeName != m_sCurThemeName ) + { + LOG->Warn( "ThemeManager: theme name was not restored after RunLuaScripts" ); + m_sCurThemeName = sCurThemeName; + } } void ThemeManager::UpdateLuaGlobals()