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/menu.c | |
parent | 03b75327111a6c8474c63efaad8f55ba7665c09c (diff) | |
download | rockbox-be185a1eafa7ecdda6b4b994752491fa12a64ac9.tar.gz rockbox-be185a1eafa7ecdda6b4b994752491fa12a64ac9.zip |
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/menu.c')
-rw-r--r-- | apps/menu.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/apps/menu.c b/apps/menu.c index d970ac8861..ba772a80fa 100644 --- a/apps/menu.c +++ b/apps/menu.c | |||
@@ -296,19 +296,30 @@ void init_default_menu_viewports(struct viewport parent[NB_SCREENS], bool hide_b | |||
296 | } | 296 | } |
297 | } | 297 | } |
298 | #ifdef HAS_BUTTONBAR | 298 | #ifdef HAS_BUTTONBAR |
299 | if (!hide_bars) | 299 | if (!hide_bars && global_settings.buttonbar) |
300 | parent[0].height -= BUTTONBAR_HEIGHT; | 300 | parent[0].height -= BUTTONBAR_HEIGHT; |
301 | #endif | 301 | #endif |
302 | } | 302 | } |
303 | 303 | ||
304 | bool do_setting_from_menu(const struct menu_item_ex *temp) | 304 | bool do_setting_from_menu(const struct menu_item_ex *temp) |
305 | { | 305 | { |
306 | int setting_id; | 306 | int setting_id, oldval; |
307 | const struct settings_list *setting = find_setting( | 307 | const struct settings_list *setting = find_setting( |
308 | temp->variable, | 308 | temp->variable, |
309 | &setting_id); | 309 | &setting_id); |
310 | char *title; | 310 | char *title; |
311 | char padded_title[MAX_PATH]; | 311 | char padded_title[MAX_PATH]; |
312 | int var_type = setting->flags&F_T_MASK; | ||
313 | if (var_type == F_T_INT || var_type == F_T_UINT) | ||
314 | { | ||
315 | oldval = *(int*)setting->setting; | ||
316 | } | ||
317 | else if (var_type == F_T_BOOL) | ||
318 | { | ||
319 | oldval = *(bool*)setting->setting; | ||
320 | } | ||
321 | else | ||
322 | oldval = 0; | ||
312 | if ((temp->flags&MENU_TYPE_MASK) == MT_SETTING_W_TEXT) | 323 | if ((temp->flags&MENU_TYPE_MASK) == MT_SETTING_W_TEXT) |
313 | title = temp->callback_and_desc->desc; | 324 | title = temp->callback_and_desc->desc; |
314 | else | 325 | else |
@@ -339,6 +350,14 @@ bool do_setting_from_menu(const struct menu_item_ex *temp) | |||
339 | 350 | ||
340 | option_screen((struct settings_list *)setting, | 351 | option_screen((struct settings_list *)setting, |
341 | setting->flags&F_TEMPVAR, title); | 352 | setting->flags&F_TEMPVAR, title); |
353 | if (var_type == F_T_INT || var_type == F_T_UINT) | ||
354 | { | ||
355 | return oldval != *(int*)setting->setting; | ||
356 | } | ||
357 | else if (var_type == F_T_BOOL) | ||
358 | { | ||
359 | return oldval != *(bool*)setting->setting; | ||
360 | } | ||
342 | return false; | 361 | return false; |
343 | } | 362 | } |
344 | 363 | ||
@@ -548,9 +567,9 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, | |||
548 | if (temp->flags&MENU_HAS_DESC && | 567 | if (temp->flags&MENU_HAS_DESC && |
549 | temp->callback_and_desc->desc == ID2P(LANG_LANGUAGE)) | 568 | temp->callback_and_desc->desc == ID2P(LANG_LANGUAGE)) |
550 | { | 569 | { |
570 | init_default_menu_viewports(menu_vp, hide_bars); | ||
551 | init_menu_lists(menu, &lists, selected, true, vps); | 571 | init_menu_lists(menu, &lists, selected, true, vps); |
552 | } | 572 | } |
553 | init_default_menu_viewports(menu_vp, hide_bars); | ||
554 | 573 | ||
555 | if (temp->flags&MENU_FUNC_CHECK_RETVAL) | 574 | if (temp->flags&MENU_FUNC_CHECK_RETVAL) |
556 | { | 575 | { |