diff options
Diffstat (limited to 'apps/menu.c')
-rw-r--r-- | apps/menu.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/apps/menu.c b/apps/menu.c index 283cc4c1b7..a71b21a6ec 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -429,8 +429,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected) talk_menu_item(menu, &lists); - gui_synclist_draw(&lists); - gui_syncstatusbar_draw(&statusbars, true); action_signalscreenchange(); /* load the callback, and only reload it if menu changes */ @@ -438,6 +436,8 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected) while (!done) { + gui_syncstatusbar_draw(&statusbars, true); + gui_synclist_draw(&lists); action = get_action(CONTEXT_MAINMENU,HZ); /* HZ so the status bar redraws corectly */ if (action == ACTION_NONE) @@ -494,10 +494,14 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected) if (menu_callback) menu_callback(ACTION_EXIT_MENUITEM, menu); + if (menu->flags&MENU_EXITAFTERTHISMENU) + done = true; if (stack_top > 0) { stack_top--; menu = menu_stack[stack_top]; + if (menu->flags&MENU_EXITAFTERTHISMENU) + done = true; init_menu_lists(menu, &lists, menu_stack_selected_item[stack_top], false); talk_menu_item(menu, &lists); @@ -600,12 +604,21 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected) done = true; break; } - if (type != MT_MENU && menu_callback) - menu_callback(ACTION_EXIT_MENUITEM,temp); + if (type != MT_MENU) + { + if (menu_callback) + menu_callback(ACTION_EXIT_MENUITEM,temp); + } if (current_submenus_menu != menu) init_menu_lists(menu,&lists,selected,true); /* callback was changed, so reload the menu's callback */ get_menu_callback(menu, &menu_callback); + if ((menu->flags&MENU_EXITAFTERTHISMENU) && + !(temp->flags&MENU_EXITAFTERTHISMENU)) + { + done = true; + break; + } #ifdef HAS_BUTTONBAR gui_buttonbar_set(&buttonbar, "<<<", "", ""); gui_buttonbar_draw(&buttonbar); @@ -616,8 +629,6 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected) ret = MENU_ATTACHED_USB; done = true; } - gui_syncstatusbar_draw(&statusbars, true); - gui_synclist_draw(&lists); } action_signalscreenchange(); if (start_selected) |