Index: apps/menu.c =================================================================== --- apps/menu.c (リビジョン 28280) +++ apps/menu.c (作業コピー) @@ -65,6 +65,9 @@ /* used to allow for dynamic menus */ #define MAX_MENU_SUBITEMS 64 static struct menu_item_ex *current_submenus_menu; +static const struct menu_item_ex *main_menu_stack[MAX_MENUS]; +static int main_menu_stack_selected_item[MAX_MENUS]; +static int main_stack_top = 0; static int current_subitems[MAX_MENU_SUBITEMS]; static int current_subitems_count = 0; static int talk_menu_item(int selected_item, void *data); @@ -334,8 +337,10 @@ FOR_NB_SCREENS(i) viewportmanager_theme_enable(i, !hide_theme, NULL); - const struct menu_item_ex *menu_stack[MAX_MENUS]; - int menu_stack_selected_item[MAX_MENUS]; + const struct menu_item_ex *_menu_stack[MAX_MENUS]; + int _menu_stack_selected_item[MAX_MENUS]; + const struct menu_item_ex **menu_stack = _menu_stack; + int *menu_stack_selected_item = _menu_stack_selected_item; int stack_top = 0; bool in_stringlist, done = false; struct viewport *vps = NULL; @@ -348,7 +353,18 @@ menu_callback_type menu_callback = NULL; if (start_menu == NULL) - menu = &main_menu_; + { + menu_stack = main_menu_stack; + menu_stack_selected_item = main_menu_stack_selected_item; + stack_top = main_stack_top; + if (stack_top > 0) + { + stack_top--; + menu = menu_stack[stack_top]; + selected = menu_stack_selected_item[stack_top]; + } + else menu = &main_menu_; + } else menu = start_menu; /* if hide_theme is true, assume parent has been fixed before passed into @@ -659,6 +675,17 @@ gui_synclist_speak_item(&lists); } } + if (start_menu == NULL) + { + if (stack_top < MAX_MENUS) + { + selected = get_menu_selection(gui_synclist_get_sel_pos(&lists), menu); + menu_stack[stack_top] = menu; + menu_stack_selected_item[stack_top] = selected; + stack_top++; + } + main_stack_top = stack_top; + } if (start_selected) { /* make sure the start_selected variable is set to