summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/gui/skin_engine/skin_engine.c63
-rw-r--r--apps/gui/skin_engine/skin_parser.c24
2 files changed, 53 insertions, 34 deletions
diff --git a/apps/gui/skin_engine/skin_engine.c b/apps/gui/skin_engine/skin_engine.c
index 8e85cb891f..7a9a10ec57 100644
--- a/apps/gui/skin_engine/skin_engine.c
+++ b/apps/gui/skin_engine/skin_engine.c
@@ -55,34 +55,7 @@ void theme_init_buffer(void)
55} 55}
56#endif 56#endif
57 57
58void settings_apply_skins(void) 58void skin_data_free_buflib_allocs(struct wps_data *wps_data);
59{
60 int i, j;
61 skin_buffer_init(skin_buffer, SKIN_BUFFER_SIZE);
62
63#ifdef HAVE_LCD_BITMAP
64 skin_backdrop_init();
65 skin_font_init();
66#endif
67 gui_sync_skin_init();
68
69 /* Make sure each skin is loaded */
70 for (i=0; i<SKINNABLE_SCREENS_COUNT; i++)
71 {
72 FOR_NB_SCREENS(j)
73 skin_get_gwps(i, j);
74 }
75#if LCD_DEPTH > 1 || defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1
76 skin_backdrops_preload(); /* should maybe check the retval here... */
77#endif
78 viewportmanager_theme_changed(THEME_STATUSBAR);
79#if LCD_DEPTH > 1 || defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1
80 FOR_NB_SCREENS(i)
81 skin_backdrop_show(sb_get_backdrop(i));
82#endif
83}
84
85
86char* wps_default_skin(enum screen_type screen); 59char* wps_default_skin(enum screen_type screen);
87char* default_radio_skin(enum screen_type screen); 60char* default_radio_skin(enum screen_type screen);
88 61
@@ -130,6 +103,40 @@ void gui_sync_skin_init(void)
130 } 103 }
131} 104}
132 105
106void settings_apply_skins(void)
107{
108 int i, j;
109
110 for (i=0; i<SKINNABLE_SCREENS_COUNT; i++)
111 {
112 FOR_NB_SCREENS(j)
113 skin_data_free_buflib_allocs(&skins[j][i].data);
114 }
115
116 skin_buffer_init(skin_buffer, SKIN_BUFFER_SIZE);
117
118#ifdef HAVE_LCD_BITMAP
119 skin_backdrop_init();
120 skin_font_init();
121#endif
122 gui_sync_skin_init();
123
124 /* Make sure each skin is loaded */
125 for (i=0; i<SKINNABLE_SCREENS_COUNT; i++)
126 {
127 FOR_NB_SCREENS(j)
128 skin_get_gwps(i, j);
129 }
130#if LCD_DEPTH > 1 || defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1
131 skin_backdrops_preload(); /* should maybe check the retval here... */
132#endif
133 viewportmanager_theme_changed(THEME_STATUSBAR);
134#if LCD_DEPTH > 1 || defined(HAVE_REMOTE_LCD) && LCD_REMOTE_DEPTH > 1
135 FOR_NB_SCREENS(i)
136 skin_backdrop_show(sb_get_backdrop(i));
137#endif
138}
139
133void skin_load(enum skinnable_screens skin, enum screen_type screen, 140void skin_load(enum skinnable_screens skin, enum screen_type screen,
134 const char *buf, bool isfile) 141 const char *buf, bool isfile)
135{ 142{
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index d6091f9441..97f2d9a5f7 100644
--- a/apps/gui/skin_engine/skin_parser.c
+++ b/apps/gui/skin_engine/skin_parser.c
@@ -1424,12 +1424,12 @@ static bool check_feature_tag(const int type)
1424 } 1424 }
1425} 1425}
1426 1426
1427/* 1427/* This is used to free any buflib allocations before the rest of
1428 * initial setup of wps_data; does reset everything 1428 * wps_data is reset.
1429 * except fields which need to survive, i.e. 1429 * The call to this in settings_apply_skins() is the last chance to do
1430 * 1430 * any core_free()'s before wps_data is trashed and those handles lost
1431 **/ 1431 */
1432static void skin_data_reset(struct wps_data *wps_data) 1432void skin_data_free_buflib_allocs(struct wps_data *wps_data)
1433{ 1433{
1434#ifdef HAVE_LCD_BITMAP 1434#ifdef HAVE_LCD_BITMAP
1435#ifndef __PCTOOL__ 1435#ifndef __PCTOOL__
@@ -1442,6 +1442,18 @@ static void skin_data_reset(struct wps_data *wps_data)
1442 list = list->next; 1442 list = list->next;
1443 } 1443 }
1444#endif 1444#endif
1445#endif
1446}
1447
1448/*
1449 * initial setup of wps_data; does reset everything
1450 * except fields which need to survive, i.e.
1451 * Also called if the load fails
1452 **/
1453static void skin_data_reset(struct wps_data *wps_data)
1454{
1455 skin_data_free_buflib_allocs(wps_data);
1456#ifdef HAVE_LCD_BITMAP
1445 wps_data->images = NULL; 1457 wps_data->images = NULL;
1446#endif 1458#endif
1447 wps_data->tree = NULL; 1459 wps_data->tree = NULL;