diff --git a/file_list.c b/file_list.c index f964d23df4..d8929c41f0 100644 --- a/file_list.c +++ b/file_list.c @@ -43,7 +43,9 @@ void file_list_push(file_list_t *list, size_t file_list_get_size(const file_list_t *list) { - return list->size; + if (list) + return list->size; + return 0; } size_t file_list_get_directory_ptr(const file_list_t *list) diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index 786d65fe62..eb92c629d4 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -106,7 +106,7 @@ static int menu_action_ok(menu_file_list_cbs_t *cbs) const char *path = NULL; unsigned type = 0; - if (file_list_get_size(driver.menu->selection_buf) == 0) + if (menu_list_get_size() == 0) return 0; file_list_get_at_offset(driver.menu->selection_buf, @@ -208,12 +208,11 @@ static int menu_settings_iterate(unsigned action, menu_navigation_decrement(driver.menu); else menu_navigation_set(driver.menu, - file_list_get_size(driver.menu->selection_buf) - 1); + menu_list_get_size() - 1); break; case MENU_ACTION_DOWN: - if ((driver.menu->selection_ptr + 1) < - file_list_get_size(driver.menu->selection_buf)) + if ((driver.menu->selection_ptr + 1) < (menu_list_get_size())) menu_navigation_increment(driver.menu); else menu_navigation_clear(driver.menu, false); @@ -489,7 +488,7 @@ static int menu_load_or_open_zip_iterate(unsigned action) file_list_get_last(driver.menu->menu_stack, &menu_path, &menu_label, NULL); - if (file_list_get_size(driver.menu->selection_buf) == 0) + if (menu_list_get_size() == 0) return 0; file_list_get_at_offset(driver.menu->selection_buf, @@ -588,12 +587,11 @@ static int menu_common_iterate(unsigned action) driver.menu->selection_ptr - scroll_speed); else menu_navigation_set(driver.menu, - file_list_get_size(driver.menu->selection_buf) - 1); + menu_list_get_size() - 1); break; case MENU_ACTION_DOWN: - if (driver.menu->selection_ptr + scroll_speed < - file_list_get_size(driver.menu->selection_buf)) + if (driver.menu->selection_ptr + scroll_speed < (menu_list_get_size())) menu_navigation_set(driver.menu, driver.menu->selection_ptr + scroll_speed); else @@ -609,8 +607,7 @@ static int menu_common_iterate(unsigned action) break; case MENU_ACTION_RIGHT: - if (driver.menu->selection_ptr + fast_scroll_speed < - file_list_get_size(driver.menu->selection_buf)) + if (driver.menu->selection_ptr + fast_scroll_speed < (menu_list_get_size())) menu_navigation_set(driver.menu, driver.menu->selection_ptr + fast_scroll_speed); else diff --git a/frontend/menu/disp/glui.c b/frontend/menu/disp/glui.c index fa78fd3b30..be9cd2cc52 100644 --- a/frontend/menu/disp/glui.c +++ b/frontend/menu/disp/glui.c @@ -20,6 +20,7 @@ #include #include +#include "../menu_list.h" #include "../menu_common.h" #include "../menu_driver.h" #include "menu_display.h" @@ -240,12 +241,12 @@ static void glui_frame(void) if (driver.menu->selection_ptr >= glui->term_height / 2) begin = driver.menu->selection_ptr - glui->term_height / 2; end = (driver.menu->selection_ptr + glui->term_height <= - file_list_get_size(driver.menu->selection_buf)) ? + menu_list_get_size()) ? driver.menu->selection_ptr + glui->term_height : - file_list_get_size(driver.menu->selection_buf); + menu_list_get_size(); /* Do not scroll if all items are visible. */ - if (file_list_get_size(driver.menu->selection_buf) <= glui->term_height) + if (menu_list_get_size() <= glui->term_height) begin = 0; if (end - begin > glui->term_height) diff --git a/frontend/menu/disp/rgui.c b/frontend/menu/disp/rgui.c index c1704b142a..5a6e8c3aa0 100644 --- a/frontend/menu/disp/rgui.c +++ b/frontend/menu/disp/rgui.c @@ -22,6 +22,7 @@ #include #include "../menu_driver.h" +#include "../menu_list.h" #include "../menu_common.h" #include "../../../general.h" #include "../../../config.def.h" @@ -278,12 +279,12 @@ static void rgui_render(void) if (driver.menu->selection_ptr >= RGUI_TERM_HEIGHT / 2) begin = driver.menu->selection_ptr - RGUI_TERM_HEIGHT / 2; end = (driver.menu->selection_ptr + RGUI_TERM_HEIGHT <= - file_list_get_size(driver.menu->selection_buf)) ? + menu_list_get_size()) ? driver.menu->selection_ptr + RGUI_TERM_HEIGHT : - file_list_get_size(driver.menu->selection_buf); + menu_list_get_size(); /* Do not scroll if all items are visible. */ - if (file_list_get_size(driver.menu->selection_buf) <= RGUI_TERM_HEIGHT) + if (menu_list_get_size() <= RGUI_TERM_HEIGHT) begin = 0; if (end - begin > RGUI_TERM_HEIGHT) diff --git a/frontend/menu/disp/rmenu.c b/frontend/menu/disp/rmenu.c index 5d5a5fd824..31dcb4ba87 100644 --- a/frontend/menu/disp/rmenu.c +++ b/frontend/menu/disp/rmenu.c @@ -142,11 +142,11 @@ static void rmenu_render(void) begin = (menu->selection_ptr >= (ENTRIES_HEIGHT / 2)) ? (menu->selection_ptr - (ENTRIES_HEIGHT / 2)) : 0; end = ((menu->selection_ptr + ENTRIES_HEIGHT) <= - file_list_get_size(menu->selection_buf)) ? + menu_list_get_size()) ? menu->selection_ptr + ENTRIES_HEIGHT : - file_list_get_size(menu->selection_buf); + menu_list_get_size(); - if (file_list_get_size(menu->selection_buf) <= ENTRIES_HEIGHT) + if (menu_list_get_size() <= ENTRIES_HEIGHT) begin = 0; if (end - begin > ENTRIES_HEIGHT) diff --git a/frontend/menu/disp/rmenu_xui.cpp b/frontend/menu/disp/rmenu_xui.cpp index ac9a35323a..29b90e48ca 100644 --- a/frontend/menu/disp/rmenu_xui.cpp +++ b/frontend/menu/disp/rmenu_xui.cpp @@ -365,7 +365,7 @@ static void rmenu_xui_render(void) return; begin = driver.menu->selection_ptr; - end = file_list_get_size(driver.menu->selection_buf); + end = menu_list_get_size(); rmenu_xui_render_background(); diff --git a/frontend/menu/disp/xmb.c b/frontend/menu/disp/xmb.c index ec38fd6f11..0c2a473411 100644 --- a/frontend/menu/disp/xmb.c +++ b/frontend/menu/disp/xmb.c @@ -20,6 +20,7 @@ #include #include +#include "../menu_list.h" #include "../menu_common.h" #include "../menu_driver.h" #include "menu_display.h" @@ -354,7 +355,7 @@ static void xmb_selection_pointer_changed(void) return; current = driver.menu->selection_ptr; - end = file_list_get_size(driver.menu->selection_buf); + end = menu_list_get_size(); for (i = 0; i < end; i++) { @@ -392,7 +393,7 @@ static void xmb_populate_entries(void *data, const char *path, if (!xmb) return; - xmb->depth = file_list_get_size(driver.menu->menu_stack); + xmb->depth = menu_list_get_stack_size(); if (xmb->depth > xmb->old_depth) { @@ -451,7 +452,7 @@ static void xmb_frame(void) xmb_draw_text(title_msg, xmb->title_margin_left, gl->win_height - xmb->title_margin_top/2, 1, 1); - end = file_list_get_size(driver.menu->selection_buf); + end = menu_list_get_size(); current = driver.menu->selection_ptr; for (i = 0; i < end; i++) diff --git a/frontend/menu/menu_list.c b/frontend/menu/menu_list.c index 0b8c653bc3..45ff51c290 100644 --- a/frontend/menu/menu_list.c +++ b/frontend/menu/menu_list.c @@ -38,6 +38,20 @@ end: file_list_free(list); } +size_t menu_list_get_stack_size(void) +{ + if (!driver.menu) + return 0; + return file_list_get_size(driver.menu->menu_stack); +} + +size_t menu_list_get_size(void) +{ + if (!driver.menu) + return 0; + return file_list_get_size(driver.menu->selection_buf); +} + void menu_list_flush_stack(file_list_t *list, unsigned final_type) { diff --git a/frontend/menu/menu_list.h b/frontend/menu/menu_list.h index f8ef80a9dd..d19c407922 100644 --- a/frontend/menu/menu_list.h +++ b/frontend/menu/menu_list.h @@ -38,6 +38,10 @@ void menu_list_pop_stack(file_list_t *list); void menu_list_pop_stack_by_needle(file_list_t *list, const char *needle); +size_t menu_list_get_stack_size(void); + +size_t menu_list_get_size(void); + void menu_list_clear(file_list_t *list); void menu_list_push(file_list_t *list, diff --git a/frontend/menu/menu_navigation.c b/frontend/menu/menu_navigation.c index 19fe7399c5..9f4ed61adc 100644 --- a/frontend/menu/menu_navigation.c +++ b/frontend/menu/menu_navigation.c @@ -21,6 +21,7 @@ #include #include #include "menu_common.h" +#include "menu_list.h" #include "menu_navigation.h" void menu_navigation_clear(menu_handle_t *menu, bool pending_push) @@ -57,7 +58,7 @@ void menu_navigation_set(menu_handle_t *menu, size_t i) void menu_navigation_set_last(menu_handle_t *menu) { - menu->selection_ptr = file_list_get_size(menu->selection_buf) - 1; + menu->selection_ptr = menu_list_get_size() - 1; if (driver.menu_ctx && driver.menu_ctx->navigation_set_last) driver.menu_ctx->navigation_set_last(menu);