summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2007-02-21 12:22:07 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2007-02-21 12:22:07 +0000
commitd563cb256793432eb9e6d5121a8c15f542d37c00 (patch)
tree08306aecee6d52578ad5ea55530cb674f70cd589 /apps
parent81029ed17eb99ecfbf2fe3082c88fc32501d2e65 (diff)
downloadrockbox-d563cb256793432eb9e6d5121a8c15f542d37c00.zip
rockbox-d563cb256793432eb9e6d5121a8c15f542d37c00.tar.gz
rockbox-d563cb256793432eb9e6d5121a8c15f542d37c00.tar.bz2
rockbox-d563cb256793432eb9e6d5121a8c15f542d37c00.tar.xz
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
Diffstat (limited to 'apps')
-rw-r--r--apps/menu.c26
1 files changed, 10 insertions, 16 deletions
diff --git a/apps/menu.c b/apps/menu.c
index e1a5e99..6b3d1c3 100644
--- a/apps/menu.c
+++ b/apps/menu.c
@@ -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;