From d563cb256793432eb9e6d5121a8c15f542d37c00 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Wed, 21 Feb 2007 12:22:07 +0000 Subject: [PATCH] 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 --- apps/menu.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/apps/menu.c b/apps/menu.c index e1a5e99c68..6b3d1c3d48 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;