From 66c2ae244f6098c6af5120c96c616a1739d0ae02 Mon Sep 17 00:00:00 2001 From: Joseph-Eugene Winzer Date: Wed, 8 Mar 2017 23:17:38 +0100 Subject: GUI: Fix resolution of theme filename to id getThemeId() returned "builtin" for valid filenames because FSNode only searches for the theme filename, like "scummmodern.zip" in the current directory. listUsableThemes() searches SearchMan default directories for theme files. --- gui/ThemeEngine.cpp | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'gui/ThemeEngine.cpp') diff --git a/gui/ThemeEngine.cpp b/gui/ThemeEngine.cpp index 8e04b35f45..c27d36d07e 100644 --- a/gui/ThemeEngine.cpp +++ b/gui/ThemeEngine.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 list; + listUsableThemes(list); + + for (Common::List::const_iterator i = list.begin(); i != list.end(); ++i) { + if (filename.equalsIgnoreCase(i->filename)) + return i->id; } + + return "builtin"; } void ThemeEngine::showCursor() { -- cgit v1.2.3