summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2011-11-28 10:58:15 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2011-11-28 10:58:15 +0000
commitd66592bad11b09ede186751a0fa1751feb29c15f (patch)
tree103c73932fe4a83df04d8b47020449f3faa72c0c /apps
parent25bce232f2883d2bba47fa9b908d1b95ee71cd3a (diff)
downloadrockbox-d66592bad11b09ede186751a0fa1751feb29c15f.tar.gz
rockbox-d66592bad11b09ede186751a0fa1751feb29c15f.zip
Be less smart about when to reload skins as it caused more problems than it was worth. If any theme setting is loading from a .cfg reload all skins. Fixes FS#12410
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31081 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/gui/skin_engine/skin_engine.c25
-rw-r--r--apps/settings.c8
2 files changed, 14 insertions, 19 deletions
diff --git a/apps/gui/skin_engine/skin_engine.c b/apps/gui/skin_engine/skin_engine.c
index e28e4fbbf4..30ec0e75b8 100644
--- a/apps/gui/skin_engine/skin_engine.c
+++ b/apps/gui/skin_engine/skin_engine.c
@@ -139,29 +139,20 @@ void settings_apply_skins(void)
139 { 139 {
140 FOR_NB_SCREENS(j) 140 FOR_NB_SCREENS(j)
141 { 141 {
142 bool load = false;
143 get_skin_filename(filename, MAX_PATH, i,j); 142 get_skin_filename(filename, MAX_PATH, i,j);
144 143
145 if (filename[0] && (strcmp(filename, skins[i][j].filename) || skins[i][j].failsafe_loaded)) 144 if (!first_run)
146 load = true;
147 else if (first_run || (!filename[0] && !skins[i][j].failsafe_loaded))
148 load = true;
149
150 if (load)
151 { 145 {
152 if (!first_run) 146 skin_data_free_buflib_allocs(&skins[i][j].data);
153 {
154 skin_data_free_buflib_allocs(&skins[i][j].data);
155#ifdef HAVE_BACKDROP_IMAGE 147#ifdef HAVE_BACKDROP_IMAGE
156 if (skins[i][j].data.backdrop_id >= 0) 148 if (skins[i][j].data.backdrop_id >= 0)
157 skin_backdrop_unload(skins[i][j].data.backdrop_id); 149 skin_backdrop_unload(skins[i][j].data.backdrop_id);
158#endif 150#endif
159 }
160 gui_skin_reset(&skins[i][j]);
161 skins[i][j].gui_wps.display = &screens[j];
162 if (skin_helpers[i].load_on_boot)
163 skin_get_gwps(i, j);
164 } 151 }
152 gui_skin_reset(&skins[i][j]);
153 skins[i][j].gui_wps.display = &screens[j];
154 if (skin_helpers[i].load_on_boot)
155 skin_get_gwps(i, j);
165 } 156 }
166 } 157 }
167 first_run = false; 158 first_run = false;
diff --git a/apps/settings.c b/apps/settings.c
index 3c28d316b5..408e377e1a 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -268,6 +268,7 @@ bool settings_load_config(const char* file, bool apply)
268 char* name; 268 char* name;
269 char* value; 269 char* value;
270 int i; 270 int i;
271 bool theme_changed = false;
271 fd = open_utf8(file, O_RDONLY); 272 fd = open_utf8(file, O_RDONLY);
272 if (fd < 0) 273 if (fd < 0)
273 return false; 274 return false;
@@ -275,13 +276,15 @@ bool settings_load_config(const char* file, bool apply)
275 while (read_line(fd, line, sizeof line) > 0) 276 while (read_line(fd, line, sizeof line) > 0)
276 { 277 {
277 if (!settings_parseline(line, &name, &value)) 278 if (!settings_parseline(line, &name, &value))
278 continue; 279 continue;
279 for(i=0; i<nb_settings; i++) 280 for(i=0; i<nb_settings; i++)
280 { 281 {
281 if (settings[i].cfg_name == NULL) 282 if (settings[i].cfg_name == NULL)
282 continue; 283 continue;
283 if (!strcasecmp(name,settings[i].cfg_name)) 284 if (!strcasecmp(name,settings[i].cfg_name))
284 { 285 {
286 if (settings[i].flags&F_THEMESETTING)
287 theme_changed = true;
285 switch (settings[i].flags&F_T_MASK) 288 switch (settings[i].flags&F_T_MASK)
286 { 289 {
287 case F_T_CUSTOM: 290 case F_T_CUSTOM:
@@ -363,7 +366,8 @@ bool settings_load_config(const char* file, bool apply)
363 { 366 {
364 settings_save(); 367 settings_save();
365 settings_apply(true); 368 settings_apply(true);
366 settings_apply_skins(); 369 if (theme_changed)
370 settings_apply_skins();
367 } 371 }
368 return true; 372 return true;
369} 373}