diff --git a/menu/menu_entry.c b/menu/menu_entry.c index c41d9b2966..dc08baca13 100644 --- a/menu/menu_entry.c +++ b/menu/menu_entry.c @@ -33,11 +33,16 @@ /* Clicks the back button */ int menu_entry_go_back(void) { + size_t new_selection_ptr; menu_list_t *menu_list = menu_list_get_ptr(); - menu_navigation_t *nav = menu_navigation_get_ptr(); + if (!menu_list) return -1; - menu_list_pop_stack(menu_list, &nav->selection_ptr); + + menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &new_selection_ptr); + menu_list_pop_stack(menu_list, &new_selection_ptr); + menu_navigation_ctl(MENU_NAVIGATION_CTL_SET_SELECTION, &new_selection_ptr); + return 0; } @@ -349,6 +354,7 @@ int menu_entry_select(uint32_t i) int menu_entry_action(menu_entry_t *entry, unsigned i, enum menu_action action) { + size_t new_selection_ptr; int ret = 0; menu_navigation_t *nav = menu_navigation_get_ptr(); menu_list_t *menu_list = menu_list_get_ptr(); @@ -365,10 +371,14 @@ int menu_entry_action(menu_entry_t *entry, unsigned i, enum menu_action action) ret = cbs->action_down(entry->type, entry->label); break; case MENU_ACTION_SCROLL_UP: - menu_navigation_descend_alphabet(nav, &nav->selection_ptr); + menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &new_selection_ptr); + menu_navigation_descend_alphabet(nav, &new_selection_ptr); + menu_navigation_ctl(MENU_NAVIGATION_CTL_SET_SELECTION, &new_selection_ptr); break; case MENU_ACTION_SCROLL_DOWN: - menu_navigation_ascend_alphabet(nav, &nav->selection_ptr); + menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &new_selection_ptr); + menu_navigation_ascend_alphabet(nav, &new_selection_ptr); + menu_navigation_ctl(MENU_NAVIGATION_CTL_SET_SELECTION, &new_selection_ptr); break; case MENU_ACTION_CANCEL: diff --git a/menu/menu_list.c b/menu/menu_list.c index b875878401..b79e79cdbd 100644 --- a/menu/menu_list.c +++ b/menu/menu_list.c @@ -150,7 +150,6 @@ void menu_list_flush_stack(menu_list_t *list, const char *label = NULL; unsigned type = 0; size_t entry_idx = 0; - menu_navigation_t *nav = menu_navigation_get_ptr(); if (!list) return; @@ -161,7 +160,12 @@ void menu_list_flush_stack(menu_list_t *list, while (menu_list_flush_stack_type( needle, label, type, final_type) != 0) { - menu_list_pop(list->menu_stack, &nav->selection_ptr); + size_t new_selection_ptr; + + menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SELECTION, &new_selection_ptr); + menu_list_pop(list->menu_stack, &new_selection_ptr); + menu_navigation_ctl(MENU_NAVIGATION_CTL_SET_SELECTION, &new_selection_ptr); + menu_list_get_last(list->menu_stack, &path, &label, &type, &entry_idx); }