diff --git a/menu/menu_navigation.c b/menu/menu_navigation.c index 290c4988bf..fbf764ff27 100644 --- a/menu/menu_navigation.c +++ b/menu/menu_navigation.c @@ -142,7 +142,9 @@ bool menu_navigation_ctl(enum menu_navigation_ctl_state state, void *data) case MENU_NAVIGATION_CTL_ASCEND_ALPHABET: { size_t i = 0, ptr; - size_t *ptr_out = (size_t*)&selection_ptr; + bool scrolled_down = false; + size_t *ptr_out = (size_t*)&selection_ptr; + size_t menu_list_size = menu_entries_get_size(); if (!scroll_index.size || !ptr_out) return false; @@ -150,13 +152,20 @@ bool menu_navigation_ctl(enum menu_navigation_ctl_state state, void *data) ptr = *ptr_out; if (ptr == scroll_index.list[scroll_index.size - 1]) - return false; + { + *ptr_out = menu_list_size - 1; + menu_driver_ctl(RARCH_MENU_CTL_NAVIGATION_ASCEND_ALPHABET, ptr_out); + return true; + } while (i < scroll_index.size - 1 && scroll_index.list[i + 1] <= ptr) i++; *ptr_out = scroll_index.list[i + 1]; + if (*ptr_out >= menu_list_size) + *ptr_out = menu_list_size - 1; + menu_driver_ctl(RARCH_MENU_CTL_NAVIGATION_ASCEND_ALPHABET, ptr_out); } break;