diff options
Diffstat (limited to 'apps/gui/skin_engine/skin_engine.c')
-rw-r--r-- | apps/gui/skin_engine/skin_engine.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/apps/gui/skin_engine/skin_engine.c b/apps/gui/skin_engine/skin_engine.c index b3626b681d..8ba76e5739 100644 --- a/apps/gui/skin_engine/skin_engine.c +++ b/apps/gui/skin_engine/skin_engine.c | |||
@@ -149,16 +149,28 @@ void skin_unload_all(void) | |||
149 | gui_sync_skin_init(); | 149 | gui_sync_skin_init(); |
150 | } | 150 | } |
151 | 151 | ||
152 | static void skin_reset_buffers(int item, int screen) | ||
153 | { | ||
154 | skin_data_free_buflib_allocs(&skins[item][screen].data); | ||
155 | #ifdef HAVE_ALBUMART | ||
156 | if (skins[item][screen].data.playback_aa_slot >= 0) | ||
157 | playback_release_aa_slot(skins[item][screen].data.playback_aa_slot); | ||
158 | #endif | ||
159 | #ifdef HAVE_BACKDROP_IMAGE | ||
160 | if (skins[item][screen].data.backdrop_id >= 0) | ||
161 | skin_backdrop_unload(skins[item][screen].data.backdrop_id); | ||
162 | #endif | ||
163 | } | ||
164 | |||
152 | void settings_apply_skins(void) | 165 | void settings_apply_skins(void) |
153 | { | 166 | { |
154 | int i; | 167 | int i; |
155 | char filename[MAX_PATH]; | 168 | char filename[MAX_PATH]; |
156 | static bool first_run = true; | ||
157 | 169 | ||
158 | if (audio_status() & AUDIO_STATUS_PLAY) | 170 | if (audio_status() & AUDIO_STATUS_PLAY) |
159 | audio_stop(); | 171 | audio_stop(); |
160 | 172 | ||
161 | skin_backdrop_init(); | 173 | bool first_run = skin_backdrop_init(); |
162 | skins_initialised = true; | 174 | skins_initialised = true; |
163 | 175 | ||
164 | /* Make sure each skin is loaded */ | 176 | /* Make sure each skin is loaded */ |
@@ -170,15 +182,7 @@ void settings_apply_skins(void) | |||
170 | 182 | ||
171 | if (!first_run) | 183 | if (!first_run) |
172 | { | 184 | { |
173 | skin_data_free_buflib_allocs(&skins[i][j].data); | 185 | skin_reset_buffers(i, j); |
174 | #ifdef HAVE_ALBUMART | ||
175 | if (skins[i][j].data.playback_aa_slot >= 0) | ||
176 | playback_release_aa_slot(skins[i][j].data.playback_aa_slot); | ||
177 | #endif | ||
178 | #ifdef HAVE_BACKDROP_IMAGE | ||
179 | if (skins[i][j].data.backdrop_id >= 0) | ||
180 | skin_backdrop_unload(skins[i][j].data.backdrop_id); | ||
181 | #endif | ||
182 | } | 186 | } |
183 | gui_skin_reset(&skins[i][j]); | 187 | gui_skin_reset(&skins[i][j]); |
184 | skins[i][j].gui_wps.display = &screens[j]; | 188 | skins[i][j].gui_wps.display = &screens[j]; |
@@ -186,17 +190,14 @@ void settings_apply_skins(void) | |||
186 | skin_get_gwps(i, j); | 190 | skin_get_gwps(i, j); |
187 | } | 191 | } |
188 | } | 192 | } |
189 | first_run = false; | 193 | |
190 | #ifdef HAVE_BACKDROP_IMAGE | ||
191 | /* any backdrop that was loaded with "-" has to be reloaded because | 194 | /* any backdrop that was loaded with "-" has to be reloaded because |
192 | * the setting may have changed */ | 195 | * the setting may have changed */ |
193 | skin_backdrop_load_setting(); | 196 | skin_backdrop_load_setting(); |
194 | #endif | ||
195 | viewportmanager_theme_changed(THEME_STATUSBAR); | 197 | viewportmanager_theme_changed(THEME_STATUSBAR); |
196 | #ifdef HAVE_BACKDROP_IMAGE | 198 | |
197 | FOR_NB_SCREENS(i) | 199 | FOR_NB_SCREENS(i) |
198 | skin_backdrop_show(sb_get_backdrop(i)); | 200 | skin_backdrop_show(sb_get_backdrop(i)); |
199 | #endif | ||
200 | } | 201 | } |
201 | 202 | ||
202 | void skin_load(enum skinnable_screens skin, enum screen_type screen, | 203 | void skin_load(enum skinnable_screens skin, enum screen_type screen, |