diff options
author | Jonathan Gordon <rockbox@jdgordon.info> | 2008-03-26 09:05:42 +0000 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2008-03-26 09:05:42 +0000 |
commit | be185a1eafa7ecdda6b4b994752491fa12a64ac9 (patch) | |
tree | 739829f3bd883ad3cc67b5262af32684c9f6cf6f /apps/gui | |
parent | 03b75327111a6c8474c63efaad8f55ba7665c09c (diff) |
fix the buttonbar in the browser and menus.
fix a problem where the menus wouldnt redraw when they should have when settings change
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16816 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/gui')
-rw-r--r-- | apps/gui/list.c | 38 | ||||
-rw-r--r-- | apps/gui/list.h | 2 |
2 files changed, 26 insertions, 14 deletions
diff --git a/apps/gui/list.c b/apps/gui/list.c index 1f0f0ff01c..07ef578d29 100644 --- a/apps/gui/list.c +++ b/apps/gui/list.c @@ -63,15 +63,26 @@ void list_draw(struct screen *display, struct viewport *parent, struct gui_syncl #ifdef HAVE_LCD_BITMAP static struct viewport parent[NB_SCREENS]; -void list_init_viewports(void) +void list_init_viewports(struct gui_synclist *list) { int i; struct viewport *vp; FOR_NB_SCREENS(i) { vp = &parent[i]; - viewport_set_defaults(vp, i); + if (!list) + viewport_set_defaults(vp, i); + else if (list->parent[i] == vp) + { + viewport_set_defaults(vp, i); + list->parent[i]->y = global_settings.statusbar?STATUSBAR_HEIGHT:0; + list->parent[i]->height = screens[i].height - list->parent[i]->y; + } } +#ifdef HAS_BUTTONBAR + if (list && (list->parent[0] == &parent[0]) && global_settings.buttonbar) + list->parent[0]->height -= BUTTONBAR_HEIGHT; +#endif force_list_reinit = false; } #else @@ -85,8 +96,9 @@ static struct viewport parent[NB_SCREENS] = .height = LCD_HEIGHT }, }; -void list_init_viewports(void) +void list_init_viewports(struct gui_synclist *list) { + (void)list; } #endif @@ -135,14 +147,9 @@ void gui_synclist_init(struct gui_synclist * gui_list, else { gui_list->parent[i] = &parent[i]; - gui_list->parent[i]->y = global_settings.statusbar?STATUSBAR_HEIGHT:0; - gui_list->parent[i]->height = screens[i].height - gui_list->parent[i]->y; -#ifdef HAS_BUTTONBAR - if (screens[i].has_buttonbar) - gui_list->parent[i]->height -= BUTTONBAR_HEIGHT; -#endif } } + list_init_viewports(gui_list); gui_list->limit_scroll = false; gui_list->data=data; gui_list->scroll_all=scroll_all; @@ -214,7 +221,6 @@ void gui_synclist_draw(struct gui_synclist *gui_list) #ifdef HAS_BUTTONBAR static bool last_buttonbar = false; #endif - if (force_list_reinit || #ifdef HAS_BUTTONBAR last_buttonbar != screens[SCREEN_MAIN].has_buttonbar || @@ -222,7 +228,7 @@ void gui_synclist_draw(struct gui_synclist *gui_list) last_list != gui_list || gui_list->nb_items != last_count) { - list_init_viewports(); + list_init_viewports(gui_list); force_list_reinit = false; } #ifdef HAS_BUTTONBAR @@ -817,14 +823,20 @@ static char* simplelist_static_getname(int item, void * data, char *buffer) bool simplelist_show_list(struct simplelist_info *info) { struct gui_synclist lists; - int action, old_line_count = simplelist_line_count; + struct viewport vp[NB_SCREENS]; + int action, old_line_count = simplelist_line_count,i; char* (*getname)(int item, void * data, char *buffer); if (info->get_name) getname = info->get_name; else getname = simplelist_static_getname; + FOR_NB_SCREENS(i) + { + viewport_set_defaults(&vp[i], i); + } gui_synclist_init(&lists, getname, info->callback_data, - info->scroll_all, info->selection_size, NULL); + info->scroll_all, info->selection_size, vp); + if (info->title) gui_synclist_set_title(&lists, info->title, NOICON); if (info->get_icon) diff --git a/apps/gui/list.h b/apps/gui/list.h index 12f88174d3..30de784687 100644 --- a/apps/gui/list.h +++ b/apps/gui/list.h @@ -135,7 +135,7 @@ extern void gui_list_screen_scroll_step(int ofs); extern void gui_list_screen_scroll_out_of_view(bool enable); #endif /* HAVE_LCD_BITMAP */ -void list_init_viewports(void); +void list_init_viewports(struct gui_synclist * lists); extern void gui_synclist_init( struct gui_synclist * lists, |