forked from len0rd/rockbox
Dont load the menu callback so often.
Send ACTION_MENUITEM_EXIT to all menus when exiting. return value is ignored. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12431 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
81029ed17e
commit
d563cb2567
1 changed files with 10 additions and 16 deletions
26
apps/menu.c
26
apps/menu.c
|
|
@ -587,6 +587,9 @@ int do_menu(const struct menu_item_ex *start_menu)
|
||||||
gui_syncstatusbar_draw(&statusbars, true);
|
gui_syncstatusbar_draw(&statusbars, true);
|
||||||
action_signalscreenchange();
|
action_signalscreenchange();
|
||||||
|
|
||||||
|
/* load the callback, and only reload it if menu changes */
|
||||||
|
get_menu_callback(menu, &menu_callback);
|
||||||
|
|
||||||
while (ret == 0)
|
while (ret == 0)
|
||||||
{
|
{
|
||||||
action = get_action(CONTEXT_MAINMENU,HZ);
|
action = get_action(CONTEXT_MAINMENU,HZ);
|
||||||
|
|
@ -597,10 +600,10 @@ int do_menu(const struct menu_item_ex *start_menu)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
get_menu_callback(menu,&menu_callback);
|
|
||||||
if (menu_callback)
|
if (menu_callback)
|
||||||
{
|
{
|
||||||
action = menu_callback(action,menu);
|
action = menu_callback(action, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gui_synclist_do_button(&lists,action,LIST_WRAP_UNLESS_HELD))
|
if (gui_synclist_do_button(&lists,action,LIST_WRAP_UNLESS_HELD))
|
||||||
|
|
@ -615,28 +618,18 @@ int do_menu(const struct menu_item_ex *start_menu)
|
||||||
(action == ACTION_STD_MENU))
|
(action == ACTION_STD_MENU))
|
||||||
{
|
{
|
||||||
in_stringlist = false;
|
in_stringlist = false;
|
||||||
|
if (menu_callback)
|
||||||
|
menu_callback(ACTION_EXIT_MENUITEM, menu);
|
||||||
|
|
||||||
if (stack_top > 0)
|
if (stack_top > 0)
|
||||||
{
|
{
|
||||||
get_menu_callback(menu,&menu_callback);
|
|
||||||
if (menu_callback)
|
|
||||||
{
|
|
||||||
if (menu_callback(action,menu) ==
|
|
||||||
ACTION_EXIT_MENUITEM)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
stack_top--;
|
stack_top--;
|
||||||
menu = menu_stack[stack_top];
|
menu = menu_stack[stack_top];
|
||||||
init_menu_lists(menu, &lists,
|
init_menu_lists(menu, &lists,
|
||||||
menu_stack_selected_item[stack_top], false);
|
menu_stack_selected_item[stack_top], false);
|
||||||
talk_menu_item(menu, &lists);
|
talk_menu_item(menu, &lists);
|
||||||
}
|
/* new menu, so reload the callback */
|
||||||
else
|
|
||||||
{
|
|
||||||
get_menu_callback(menu, &menu_callback);
|
get_menu_callback(menu, &menu_callback);
|
||||||
if (menu_callback)
|
|
||||||
menu_callback(ACTION_EXIT_MENUITEM, menu);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (action == ACTION_STD_OK)
|
else if (action == ACTION_STD_OK)
|
||||||
|
|
@ -701,9 +694,10 @@ int do_menu(const struct menu_item_ex *start_menu)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
get_menu_callback(temp,&menu_callback);
|
|
||||||
if (type != MT_MENU && menu_callback)
|
if (type != MT_MENU && menu_callback)
|
||||||
menu_callback(ACTION_EXIT_MENUITEM,temp);
|
menu_callback(ACTION_EXIT_MENUITEM,temp);
|
||||||
|
/* callback was changed, so reload the menu's callback */
|
||||||
|
get_menu_callback(menu, &menu_callback);
|
||||||
}
|
}
|
||||||
else if(default_event_handler(action) == SYS_USB_CONNECTED)
|
else if(default_event_handler(action) == SYS_USB_CONNECTED)
|
||||||
ret = MENU_ATTACHED_USB;
|
ret = MENU_ATTACHED_USB;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue