diff options
| author | Jonathan Gordon <rockbox@jdgordon.info> | 2007-03-18 06:31:33 +0000 |
|---|---|---|
| committer | Jonathan Gordon <rockbox@jdgordon.info> | 2007-03-18 06:31:33 +0000 |
| commit | b5e587c0811e670efaf19cd81c32e0035a276fdb (patch) | |
| tree | ef49e9900f4d4a2c3375df297c15a2ab5bacd8d7 | |
| parent | 7d7135165dd31d60b08530d2ae225f5223f4d5ea (diff) | |
| download | rockbox-b5e587c0811e670efaf19cd81c32e0035a276fdb.zip rockbox-b5e587c0811e670efaf19cd81c32e0035a276fdb.tar.gz rockbox-b5e587c0811e670efaf19cd81c32e0035a276fdb.tar.bz2 rockbox-b5e587c0811e670efaf19cd81c32e0035a276fdb.tar.xz | |
Fix improper shift and mask order causing FS#6842
Set start_selected if exiting do_menu() early from more places
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12826 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/menu.c | 13 | ||||
| -rw-r--r-- | apps/menu.h | 1 |
2 files changed, 9 insertions, 5 deletions
diff --git a/apps/menu.c b/apps/menu.c index 4686289..412aca7 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -176,7 +176,7 @@ static void menu_get_icon(int selected_item, void * data, ICON * icon) static void init_menu_lists(const struct menu_item_ex *menu, struct gui_synclist *lists, int selected, bool callback) { - int i, count = (menu->flags&MENU_COUNT_MASK)>>MENU_COUNT_SHIFT; + int i, count = MENU_GET_COUNT(menu->flags); menu_callback_type menu_callback = NULL; ICON icon = NOICON; current_subitems_count = 0; @@ -557,7 +557,10 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected) if (temp->flags&MENU_FUNC_CHECK_RETVAL) { if (return_value == temp->function->exit_value) - return return_value; + { + done = true; + ret = return_value; + } } break; } @@ -572,7 +575,8 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected) if (in_stringlist) { action_signalscreenchange(); - return selected; + done = true; + ret = selected; } else if (stack_top < MAX_MENUS) { @@ -689,8 +693,7 @@ static void init_oldmenu(const struct menu_item_ex *menu, (void)callback; gui_synclist_init(lists, oldmenuwrapper_getname, (void*)(intptr_t)menu->value, false, 1); - gui_synclist_set_nb_items(lists, - (menu->flags&MENU_COUNT_MASK)>>MENU_COUNT_SHIFT); + gui_synclist_set_nb_items(lists, MENU_GET_COUNT(menu->flags)); gui_synclist_limit_scroll(lists, true); gui_synclist_select_item(lists, selected); } diff --git a/apps/menu.h b/apps/menu.h index 6d7d113..ded2550 100644 --- a/apps/menu.h +++ b/apps/menu.h @@ -61,6 +61,7 @@ struct menu_func { #define MENU_COUNT_MASK 0xFFF #define MENU_COUNT_SHIFT 8 #define MENU_ITEM_COUNT(c) ((c&MENU_COUNT_MASK)<<MENU_COUNT_SHIFT) +#define MENU_GET_COUNT(flags) ((flags>>MENU_COUNT_SHIFT)&MENU_COUNT_MASK) struct menu_item_ex { unsigned int flags; /* above defines */ |