diff options
| author | Jonathan Gordon <rockbox@jdgordon.info> | 2011-09-28 01:02:48 +0000 |
|---|---|---|
| committer | Jonathan Gordon <rockbox@jdgordon.info> | 2011-09-28 01:02:48 +0000 |
| commit | 4f7a73aad84cf7b2f60b2975479281e65daaca69 (patch) | |
| tree | 635066acc3d282b8a71e17668c578f50f7b42340 | |
| parent | a1d3a1d14364425489db2b49d8e4a40f1b995b90 (diff) | |
| download | rockbox-4f7a73aad84cf7b2f60b2975479281e65daaca69.zip rockbox-4f7a73aad84cf7b2f60b2975479281e65daaca69.tar.gz rockbox-4f7a73aad84cf7b2f60b2975479281e65daaca69.tar.bz2 rockbox-4f7a73aad84cf7b2f60b2975479281e65daaca69.tar.xz | |
fix FS#12295
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30614 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/gui/skin_engine/skin_engine.c | 9 | ||||
| -rw-r--r-- | apps/gui/skin_engine/skin_engine.h | 1 | ||||
| -rw-r--r-- | apps/gui/skin_engine/skin_parser.c | 2 | ||||
| -rw-r--r-- | apps/gui/usb_screen.c | 6 |
4 files changed, 15 insertions, 3 deletions
diff --git a/apps/gui/skin_engine/skin_engine.c b/apps/gui/skin_engine/skin_engine.c index f96b91b..89230cb 100644 --- a/apps/gui/skin_engine/skin_engine.c +++ b/apps/gui/skin_engine/skin_engine.c @@ -129,7 +129,7 @@ void gui_sync_skin_init(void) } } -void settings_apply_skins(void) +void skin_unload_all(void) { int i, j; @@ -140,12 +140,17 @@ void settings_apply_skins(void) } skin_buffer_init(skin_buffer, skin_buffer_size); - #ifdef HAVE_LCD_BITMAP skin_backdrop_init(); #endif gui_sync_skin_init(); +} + +void settings_apply_skins(void) +{ + int i, j; + skin_unload_all(); /* Make sure each skin is loaded */ for (i=0; i<SKINNABLE_SCREENS_COUNT; i++) { diff --git a/apps/gui/skin_engine/skin_engine.h b/apps/gui/skin_engine/skin_engine.h index 310411b..6338d77 100644 --- a/apps/gui/skin_engine/skin_engine.h +++ b/apps/gui/skin_engine/skin_engine.h @@ -100,6 +100,7 @@ struct gui_wps *skin_get_gwps(enum skinnable_screens skin, enum screen_type scre struct wps_state *skin_get_global_state(void); void gui_sync_skin_init(void); +void skin_unload_all(void); bool skin_do_full_update(enum skinnable_screens skin, enum screen_type screen); void skin_request_full_update(enum skinnable_screens skin); diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c index 4d57fc1..adebed2 100644 --- a/apps/gui/skin_engine/skin_parser.c +++ b/apps/gui/skin_engine/skin_parser.c @@ -1452,11 +1452,13 @@ void skin_data_free_buflib_allocs(struct wps_data *wps_data) core_free(img->buflib_handle); list = list->next; } + wps_data->images = NULL; if (wps_data->font_ids != NULL) { while (wps_data->font_count > 0) font_unload(wps_data->font_ids[--wps_data->font_count]); } + wps_data->font_ids = NULL; #endif #endif } diff --git a/apps/gui/usb_screen.c b/apps/gui/usb_screen.c index 2b33550..1d9fcec 100644 --- a/apps/gui/usb_screen.c +++ b/apps/gui/usb_screen.c @@ -38,6 +38,7 @@ #include "led.h" #include "appevents.h" #include "usb_screen.h" +#include "skin_engine/skin_engine.h" #ifdef HAVE_LCD_BITMAP #include "bitmaps/usblogo.h" @@ -265,8 +266,11 @@ void gui_usb_screen_run(bool early_usb) /* The font system leaves the .fnt fd's open, so we need for force close them all */ #ifdef HAVE_LCD_BITMAP FOR_NB_SCREENS(i) + { font_unload(global_status.font_id[i]); - // FIXME skin_font_init(); /* unload all the skin fonts */ + global_status.font_id[i] = -1; + } + skin_unload_all(); #endif } |