mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
menu.c remove the check for valid menu_callback
instead of checking for menu callback use an empty callback instead this code is a bit strange in that a prior valid callback might be returned so I left the behavior but I question if thats really needed.. Change-Id: Id0c4eb208b33a6fffdbdffc63ea9cc928bba1a6d
This commit is contained in:
parent
d1a4903afb
commit
e6f49e47e3
1 changed files with 31 additions and 37 deletions
68
apps/menu.c
68
apps/menu.c
|
@ -73,6 +73,13 @@ struct menu_data_t
|
|||
int selected;
|
||||
};
|
||||
|
||||
static int empty_menu_callback(int action, const struct menu_item_ex *this_item, struct gui_synclist *this_list)
|
||||
{
|
||||
return action;
|
||||
(void)this_item;
|
||||
(void)this_list;
|
||||
}
|
||||
|
||||
static void get_menu_callback(const struct menu_item_ex *m,
|
||||
menu_callback_type *menu_callback)
|
||||
{
|
||||
|
@ -80,6 +87,9 @@ static void get_menu_callback(const struct menu_item_ex *m,
|
|||
*menu_callback= m->callback_and_desc->menu_callback;
|
||||
else
|
||||
*menu_callback = m->menu_callback;
|
||||
|
||||
if (!*menu_callback)
|
||||
*menu_callback = &empty_menu_callback;
|
||||
}
|
||||
|
||||
static bool query_audio_status(int *old_audio_status)
|
||||
|
@ -201,7 +211,7 @@ static int init_menu_lists(const struct menu_item_ex *menu,
|
|||
int start_action = ACTION_ENTER_MENUITEM;
|
||||
int count = MIN(MENU_GET_COUNT(menu->flags), MAX_MENU_SUBITEMS);
|
||||
int type = (menu->flags&MENU_TYPE_MASK);
|
||||
menu_callback_type menu_callback = NULL;
|
||||
menu_callback_type menu_callback = &empty_menu_callback;
|
||||
int icon;
|
||||
char * title;
|
||||
current_subitems_count = 0;
|
||||
|
@ -213,17 +223,10 @@ static int init_menu_lists(const struct menu_item_ex *menu,
|
|||
{
|
||||
if (type != MT_RETURN_ID)
|
||||
get_menu_callback(menu->submenus[i],&menu_callback);
|
||||
if (menu_callback)
|
||||
{
|
||||
if (menu_callback(ACTION_REQUEST_MENUITEM,
|
||||
type==MT_RETURN_ID ? (void*)(intptr_t)i: menu->submenus[i], lists)
|
||||
!= ACTION_EXIT_MENUITEM)
|
||||
{
|
||||
current_subitems[current_subitems_count] = i;
|
||||
current_subitems_count++;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
if (menu_callback(ACTION_REQUEST_MENUITEM,
|
||||
type==MT_RETURN_ID ? (void*)(intptr_t)i: menu->submenus[i], lists)
|
||||
!= ACTION_EXIT_MENUITEM)
|
||||
{
|
||||
current_subitems[current_subitems_count] = i;
|
||||
current_subitems_count++;
|
||||
|
@ -263,7 +266,7 @@ static int init_menu_lists(const struct menu_item_ex *menu,
|
|||
gui_synclist_select_item(lists, find_menu_selection(selected));
|
||||
|
||||
get_menu_callback(menu,&menu_callback);
|
||||
if (callback && menu_callback)
|
||||
if (callback)
|
||||
start_action = menu_callback(start_action, menu, lists);
|
||||
|
||||
return start_action;
|
||||
|
@ -402,7 +405,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
|
|||
int stack_top = 0;
|
||||
|
||||
struct viewport *vps = NULL;
|
||||
menu_callback_type menu_callback = NULL;
|
||||
menu_callback_type menu_callback = &empty_menu_callback;
|
||||
|
||||
/* if hide_theme is true, assume parent has been fixed before passed into
|
||||
* this function, e.g. with viewport_set_defaults(parent, screen)
|
||||
|
@ -441,16 +444,13 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
|
|||
action = gui_synclist_do_touchscreen(&lists);
|
||||
#endif
|
||||
|
||||
if (menu_callback)
|
||||
{
|
||||
int new_action = menu_callback(action, menu, &lists);
|
||||
if (new_action == ACTION_EXIT_AFTER_THIS_MENUITEM)
|
||||
ret = MENU_SELECTED_EXIT; /* exit after return from selection */
|
||||
else if (new_action == ACTION_REDRAW)
|
||||
redraw_lists = true;
|
||||
else
|
||||
action = new_action;
|
||||
}
|
||||
int new_action = menu_callback(action, menu, &lists);
|
||||
if (new_action == ACTION_EXIT_AFTER_THIS_MENUITEM)
|
||||
ret = MENU_SELECTED_EXIT; /* exit after return from selection */
|
||||
else if (new_action == ACTION_REDRAW)
|
||||
redraw_lists = true;
|
||||
else
|
||||
action = new_action;
|
||||
|
||||
if (LIKELY(gui_synclist_do_button(&lists, &action)))
|
||||
continue;
|
||||
|
@ -586,8 +586,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
|
|||
bool exiting_menu = false;
|
||||
in_stringlist = false;
|
||||
|
||||
if (menu_callback)
|
||||
menu_callback(ACTION_EXIT_MENUITEM, menu, &lists);
|
||||
menu_callback(ACTION_EXIT_MENUITEM, menu, &lists);
|
||||
|
||||
if (menu->flags&MENU_EXITAFTERTHISMENU)
|
||||
done = true;
|
||||
|
@ -630,12 +629,9 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
|
|||
{
|
||||
type = (temp->flags&MENU_TYPE_MASK);
|
||||
get_menu_callback(temp, &menu_callback);
|
||||
if (menu_callback)
|
||||
{
|
||||
action = menu_callback(ACTION_ENTER_MENUITEM, temp, &lists);
|
||||
if (action == ACTION_EXIT_MENUITEM)
|
||||
break;
|
||||
}
|
||||
action = menu_callback(ACTION_ENTER_MENUITEM, temp, &lists);
|
||||
if (action == ACTION_EXIT_MENUITEM)
|
||||
break;
|
||||
}
|
||||
switch (type)
|
||||
{
|
||||
|
@ -715,8 +711,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
|
|||
}
|
||||
if (type != MT_MENU)
|
||||
{
|
||||
if (menu_callback)
|
||||
menu_callback(ACTION_EXIT_MENUITEM, temp, &lists);
|
||||
menu_callback(ACTION_EXIT_MENUITEM, temp, &lists);
|
||||
}
|
||||
if (current_submenus_menu != menu)
|
||||
init_menu_lists(menu,&lists,selected,true,vps);
|
||||
|
@ -750,9 +745,8 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected,
|
|||
|
||||
if (redraw_lists && !done)
|
||||
{
|
||||
if (menu_callback)
|
||||
if (menu_callback(ACTION_REDRAW, menu, &lists) != ACTION_REDRAW)
|
||||
continue;
|
||||
if (menu_callback(ACTION_REDRAW, menu, &lists) != ACTION_REDRAW)
|
||||
continue;
|
||||
|
||||
|
||||
gui_synclist_set_title(&lists, lists.title, lists.title_icon);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue