diff --git a/frontend/menu/file_browser.c b/frontend/menu/file_browser.c index 4e72ae558b..076edd74b8 100644 --- a/frontend/menu/file_browser.c +++ b/frontend/menu/file_browser.c @@ -4,10 +4,11 @@ static bool directory_parse(void *data, const char *path) struct string_list *list = dir_list_new(path, filebrowser->current_dir.extensions, true); - if(!list || list->size < 1) + if(!list) return false; - dir_list_sort(list, true); + if (list->size) + dir_list_sort(list, true); filebrowser->current_dir.ptr = 0; strlcpy(filebrowser->current_dir.directory_path, @@ -56,34 +57,46 @@ bool filebrowser_iterate(void *data, unsigned action) switch(action) { case FILEBROWSER_ACTION_UP: + if (!filebrowser->list->size) + break; filebrowser->current_dir.ptr--; if (filebrowser->current_dir.ptr >= filebrowser->list->size) filebrowser->current_dir.ptr = filebrowser->list->size - 1; break; case FILEBROWSER_ACTION_DOWN: + if (!filebrowser->list->size) + break; filebrowser->current_dir.ptr++; if (filebrowser->current_dir.ptr >= filebrowser->list->size) filebrowser->current_dir.ptr = 0; break; case FILEBROWSER_ACTION_LEFT: + if (!filebrowser->list->size) + break; if (filebrowser->current_dir.ptr <= 5) filebrowser->current_dir.ptr = 0; else filebrowser->current_dir.ptr -= 5; break; case FILEBROWSER_ACTION_RIGHT: + if (!filebrowser->list->size) + break; filebrowser->current_dir.ptr = (min(filebrowser->current_dir.ptr + 5, - filebrowser->list->size-1)); + filebrowser->list->size-1)); break; case FILEBROWSER_ACTION_SCROLL_UP: + if (!filebrowser->list->size) + break; if (filebrowser->current_dir.ptr <= entries_to_scroll) filebrowser->current_dir.ptr= 0; else filebrowser->current_dir.ptr -= entries_to_scroll; break; case FILEBROWSER_ACTION_SCROLL_DOWN: + if (!filebrowser->list->size) + break; filebrowser->current_dir.ptr = (min(filebrowser->current_dir.ptr + - entries_to_scroll, filebrowser->list->size-1)); + entries_to_scroll, filebrowser->list->size-1)); break; case FILEBROWSER_ACTION_OK: ret = directory_parse(filebrowser, GET_CURRENT_PATH(filebrowser)); diff --git a/frontend/menu/rmenu.c b/frontend/menu/rmenu.c index 5f27d6e426..904d068a02 100644 --- a/frontend/menu/rmenu.c +++ b/frontend/menu/rmenu.c @@ -444,38 +444,53 @@ static void render_text(void *data) if (render_browser) { - unsigned file_count = rgui->browser->list->size; - unsigned current_index = 0; - unsigned page_number = 0; - unsigned page_base = 0; - unsigned i; - float y_increment = POSITION_Y_START; font_params_t font_parms = {0}; - - current_index = rgui->browser->current_dir.ptr; - page_number = current_index / NUM_ENTRY_PER_PAGE; - page_base = page_number * NUM_ENTRY_PER_PAGE; - font_parms.scale = FONT_SIZE_VARIABLE; - for (i = page_base; i < file_count && i < page_base + NUM_ENTRY_PER_PAGE; ++i) + if (rgui->browser->list->size) { - char fname_tmp[128]; - fill_pathname_base(fname_tmp, rgui->browser->list->elems[i].data, sizeof(fname_tmp)); - y_increment += POSITION_Y_INCREMENT; + unsigned file_count = rgui->browser->list->size; + unsigned current_index = 0; + unsigned page_number = 0; + unsigned page_base = 0; + unsigned i; + float y_increment = POSITION_Y_START; + + current_index = rgui->browser->current_dir.ptr; + page_number = current_index / NUM_ENTRY_PER_PAGE; + page_base = page_number * NUM_ENTRY_PER_PAGE; + + + for (i = page_base; i < file_count && i < page_base + NUM_ENTRY_PER_PAGE; ++i) + { + char fname_tmp[128]; + fill_pathname_base(fname_tmp, rgui->browser->list->elems[i].data, sizeof(fname_tmp)); + y_increment += POSITION_Y_INCREMENT; #ifdef HAVE_MENU_PANEL - //check if this is the currently selected file - if (strcmp(rgui->browser->current_dir.path, rgui->browser->list->elems[i].data) == 0) - menu_panel->y = y_increment; + //check if this is the currently selected file + if (strcmp(rgui->browser->current_dir.path, rgui->browser->list->elems[i].data) == 0) + menu_panel->y = y_increment; #endif + font_parms.x = POSITION_X; + font_parms.y = y_increment; + font_parms.color = i == current_index ? YELLOW : rgui->browser->list->elems[i].attr.b ? GREEN : WHITE; + + if (driver.video_poke->set_osd_msg) + driver.video_poke->set_osd_msg(driver.video_data, fname_tmp, &font_parms); + } + } + else + { + char entry[128]; font_parms.x = POSITION_X; - font_parms.y = y_increment; - font_parms.color = i == current_index ? YELLOW : rgui->browser->list->elems[i].attr.b ? GREEN : WHITE; + font_parms.y = POSITION_Y_START + POSITION_Y_INCREMENT; + font_parms.color = WHITE; + strlcpy(entry, "No entries available.", sizeof(entry)); if (driver.video_poke->set_osd_msg) - driver.video_poke->set_osd_msg(driver.video_data, fname_tmp, &font_parms); + driver.video_poke->set_osd_msg(driver.video_data, entry, &font_parms); } }