Permalink
Comparing changes
Open a pull request
- 3 commits
- 2 files changed
- 0 commit comments
- 2 contributors
Commits on Mar 09, 2017
The theme label in the Misc tab will not change to the correct theme when current language and theme is changed and 'apply' pressed. loadNewTheme() does not do a rebuild of all widgets, including the theme label, like it is explicitly done in the 'language section'. The problem is that rebuild() uses the currently applied settings to rebuild all widgets. Although a new theme was selected by the user the label will be overwritten with the name of the still active theme. By rearranging the logic a complete rebuild of the GUI is done and updates the widgets correctly.
Unified
Split
Showing
with
40 additions
and 27 deletions.
- +22 −9 gui/ThemeEngine.cpp
- +18 −18 gui/options.cpp
| @@ -2420,19 +2420,32 @@ Common::String ThemeEngine::getThemeId(const Common::String &filename) { | ||
| return "builtin"; | ||
|
|
||
| Common::FSNode node(filename); | ||
| if (!node.exists()) | ||
| return "builtin"; | ||
| if (node.exists()) { | ||
| if (node.getName().matchString("*.zip", true)) { | ||
| Common::String id = node.getName(); | ||
|
|
||
| if (node.getName().matchString("*.zip", true)) { | ||
| Common::String id = node.getName(); | ||
| for (int i = 0; i < 4; ++i) | ||
| id.deleteLastChar(); | ||
|
|
||
| for (int i = 0; i < 4; ++i) | ||
| id.deleteLastChar(); | ||
| return id; | ||
| } else { | ||
| return node.getName(); | ||
| } | ||
| } | ||
|
|
||
| return id; | ||
| } else { | ||
| return node.getName(); | ||
| // FIXME: | ||
| // A very ugly hack to map a id to a filename, this will generate | ||
| // a complete theme list, thus it is slower than it could be. | ||
| // But it is the easiest solution for now. | ||
| Common::List<ThemeDescriptor> list; | ||
| listUsableThemes(list); | ||
|
|
||
| for (Common::List<ThemeDescriptor>::const_iterator i = list.begin(); i != list.end(); ++i) { | ||
| if (filename.equalsIgnoreCase(i->filename)) | ||
| return i->id; | ||
| } | ||
|
|
||
| return "builtin"; | ||
| } | ||
|
|
||
| void ThemeEngine::showCursor() { | ||
| @@ -1838,24 +1838,6 @@ void GlobalOptionsDialog::apply() { | ||
| g_gui.loadNewTheme(g_gui.theme()->getThemeId(), selected); | ||
| ConfMan.set("gui_renderer", cfg, _domain); | ||
| } | ||
| #ifdef USE_TRANSLATION | ||
| Common::String oldLang = ConfMan.get("gui_language"); | ||
| int selLang = _guiLanguagePopUp->getSelectedTag(); | ||
|
|
||
| ConfMan.set("gui_language", TransMan.getLangById(selLang)); | ||
|
|
||
| Common::String newLang = ConfMan.get("gui_language").c_str(); | ||
| if (newLang != oldLang) { | ||
| // Activate the selected language | ||
| TransMan.setLanguage(selLang); | ||
|
|
||
| // Rebuild the Launcher and Options dialogs | ||
| g_gui.loadNewTheme(g_gui.theme()->getThemeId(), ThemeEngine::kGfxDisabled, true); | ||
| rebuild(); | ||
| if (_launcher != 0) | ||
| _launcher->rebuild(); | ||
| } | ||
| #endif // USE_TRANSLATION | ||
|
|
||
| #ifdef USE_UPDATES | ||
| ConfMan.setInt("updates_check", _updatesPopUp->getSelectedTag()); | ||
| @@ -1926,6 +1908,24 @@ void GlobalOptionsDialog::apply() { | ||
| draw(); | ||
| _newTheme.clear(); | ||
| } | ||
| #ifdef USE_TRANSLATION | ||
| Common::String oldLang = ConfMan.get("gui_language"); | ||
| int selLang = _guiLanguagePopUp->getSelectedTag(); | ||
|
|
||
| ConfMan.set("gui_language", TransMan.getLangById(selLang)); | ||
|
|
||
| Common::String newLang = ConfMan.get("gui_language").c_str(); | ||
| if (newLang != oldLang) { | ||
| // Activate the selected language | ||
| TransMan.setLanguage(selLang); | ||
|
|
||
| // Rebuild the Launcher and Options dialogs | ||
| g_gui.loadNewTheme(g_gui.theme()->getThemeId(), ThemeEngine::kGfxDisabled, true); | ||
| rebuild(); | ||
| if (_launcher != 0) | ||
| _launcher->rebuild(); | ||
| } | ||
| #endif // USE_TRANSLATION | ||
|
|
||
| OptionsDialog::apply(); | ||
| } | ||