1
0
Fork 0
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:
Jonathan Gordon 2007-02-21 12:22:07 +00:00
parent 81029ed17e
commit d563cb2567

View file

@ -587,6 +587,9 @@ int do_menu(const struct menu_item_ex *start_menu)
gui_syncstatusbar_draw(&statusbars, true);
action_signalscreenchange();
/* load the callback, and only reload it if menu changes */
get_menu_callback(menu, &menu_callback);
while (ret == 0)
{
action = get_action(CONTEXT_MAINMENU,HZ);
@ -597,10 +600,10 @@ int do_menu(const struct menu_item_ex *start_menu)
continue;
}
get_menu_callback(menu,&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))
@ -615,28 +618,18 @@ int do_menu(const struct menu_item_ex *start_menu)
(action == ACTION_STD_MENU))
{
in_stringlist = false;
if (menu_callback)
menu_callback(ACTION_EXIT_MENUITEM, menu);
if (stack_top > 0)
{
get_menu_callback(menu,&menu_callback);
if (menu_callback)
{
if (menu_callback(action,menu) ==
ACTION_EXIT_MENUITEM)
break;
}
stack_top--;
menu = menu_stack[stack_top];
init_menu_lists(menu, &lists,
menu_stack_selected_item[stack_top], false);
talk_menu_item(menu, &lists);
}
else
{
/* new menu, so reload the callback */
get_menu_callback(menu, &menu_callback);
if (menu_callback)
menu_callback(ACTION_EXIT_MENUITEM, menu);
break;
}
}
else if (action == ACTION_STD_OK)
@ -701,9 +694,10 @@ int do_menu(const struct menu_item_ex *start_menu)
}
break;
}
get_menu_callback(temp,&menu_callback);
if (type != MT_MENU && menu_callback)
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)
ret = MENU_ATTACHED_USB;