summaryrefslogtreecommitdiff
path: root/apps/gui/skin_engine/skin_backdrops.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/gui/skin_engine/skin_backdrops.c')
-rw-r--r--apps/gui/skin_engine/skin_backdrops.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/apps/gui/skin_engine/skin_backdrops.c b/apps/gui/skin_engine/skin_backdrops.c
index 1def0812da..215667d585 100644
--- a/apps/gui/skin_engine/skin_backdrops.c
+++ b/apps/gui/skin_engine/skin_backdrops.c
@@ -41,7 +41,6 @@ static struct skin_backdrop {
41} backdrops[NB_BDROPS]; 41} backdrops[NB_BDROPS];
42 42
43#define NB_BDROPS SKINNABLE_SCREENS_COUNT*NB_SCREENS 43#define NB_BDROPS SKINNABLE_SCREENS_COUNT*NB_SCREENS
44static int handle_being_loaded;
45static int current_lcd_backdrop[NB_SCREENS]; 44static int current_lcd_backdrop[NB_SCREENS];
46 45
47bool skin_backdrop_get_debug(int index, char **path, int *ref_count, size_t *size) 46bool skin_backdrop_get_debug(int index, char **path, int *ref_count, size_t *size)
@@ -65,8 +64,8 @@ bool skin_backdrop_get_debug(int index, char **path, int *ref_count, size_t *siz
65 64
66static int buflib_move_callback(int handle, void* current, void* new) 65static int buflib_move_callback(int handle, void* current, void* new)
67{ 66{
68 if (handle == handle_being_loaded) 67 (void)handle;
69 return BUFLIB_CB_CANNOT_MOVE; 68
70 for (int i=0; i<NB_BDROPS; i++) 69 for (int i=0; i<NB_BDROPS; i++)
71 { 70 {
72 if (backdrops[i].buffer == current) 71 if (backdrops[i].buffer == current)
@@ -96,7 +95,6 @@ bool skin_backdrop_init(void)
96 } 95 }
97 FOR_NB_SCREENS(i) 96 FOR_NB_SCREENS(i)
98 current_lcd_backdrop[i] = -1; 97 current_lcd_backdrop[i] = -1;
99 handle_being_loaded = -1;
100 first_go = false; 98 first_go = false;
101 } 99 }
102 return go_status; 100 return go_status;
@@ -182,16 +180,16 @@ bool skin_backdrops_preload(void)
182 backdrops[i].buffer = core_get_data(backdrops[i].buflib_handle); 180 backdrops[i].buffer = core_get_data(backdrops[i].buflib_handle);
183 if (strcmp(filename, BACKDROP_BUFFERNAME)) 181 if (strcmp(filename, BACKDROP_BUFFERNAME))
184 { 182 {
185 handle_being_loaded = backdrops[i].buflib_handle; 183 core_pin(backdrops[i].buflib_handle);
186 backdrops[i].loaded = 184 backdrops[i].loaded =
187 screens[screen].backdrop_load(filename, backdrops[i].buffer); 185 screens[screen].backdrop_load(filename, backdrops[i].buffer);
186 core_unpin(backdrops[i].buflib_handle);
188 if (!backdrops[i].loaded) 187 if (!backdrops[i].loaded)
189 { 188 {
190 core_free(backdrops[i].buflib_handle); 189 core_free(backdrops[i].buflib_handle);
191 backdrops[i].buflib_handle = -1; 190 backdrops[i].buflib_handle = -1;
192 retval = false; 191 retval = false;
193 } 192 }
194 handle_being_loaded = -1;
195 } 193 }
196 else 194 else
197 backdrops[i].loaded = true; 195 backdrops[i].loaded = true;
@@ -295,12 +293,12 @@ void skin_backdrop_load_setting(void)
295 return; 293 return;
296 } 294 }
297 bool loaded; 295 bool loaded;
296 core_pin(backdrops[i].buflib_handle);
298 backdrops[i].buffer = core_get_data(backdrops[i].buflib_handle); 297 backdrops[i].buffer = core_get_data(backdrops[i].buflib_handle);
299 handle_being_loaded = backdrops[i].buflib_handle;
300 loaded = screens[SCREEN_MAIN].backdrop_load( 298 loaded = screens[SCREEN_MAIN].backdrop_load(
301 global_settings.backdrop_file, 299 global_settings.backdrop_file,
302 backdrops[i].buffer); 300 backdrops[i].buffer);
303 handle_being_loaded = -1; 301 core_unpin(backdrops[i].buflib_handle);
304 backdrops[i].name[2] = loaded ? '.' : '\0'; 302 backdrops[i].name[2] = loaded ? '.' : '\0';
305 backdrops[i].loaded = loaded; 303 backdrops[i].loaded = loaded;
306 return; 304 return;