diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index eda49ad7f2..4857d8973f 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -365,6 +365,7 @@ int generic_action_ok_displaylist_push(const char *path, MENU_LABEL_DEFERRED_CORE_UPDATER_LIST); break; case ACTION_OK_DL_THUMBNAILS_UPDATER_LIST: + dl_type = DISPLAYLIST_PENDING_CLEAR; info.type = type; info.directory_ptr = idx; info_path = path; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 9b5e79cf1b..6885018a21 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -2934,6 +2934,8 @@ static void menu_displaylist_parse_playlist_associations( static bool menu_displaylist_push_list_process(menu_displaylist_info_t *info) { + size_t idx = 0; + if (!info) return false; @@ -2943,6 +2945,9 @@ static bool menu_displaylist_push_list_process(menu_displaylist_info_t *info) if (info->need_refresh) menu_entries_ctl(MENU_ENTRIES_CTL_REFRESH, info->list); + if (info->need_clear) + menu_navigation_ctl(MENU_NAVIGATION_CTL_SET_SELECTION, &idx); + if (info->need_push) { info->label_hash = menu_hash_calculate(info->label); @@ -3186,6 +3191,21 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); } break; + case DISPLAYLIST_PENDING_CLEAR: + { + menu_ctx_list_t list_info; + bool refresh = false; + + list_info.type = MENU_LIST_PLAIN; + list_info.action = 0; + + menu_driver_ctl(RARCH_MENU_CTL_LIST_CACHE, &list_info); + + menu_entries_add(info->list, info->path, + info->label, info->type, info->directory_ptr, 0); + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); + } + break; case DISPLAYLIST_USER_BINDS_LIST: { char lbl[PATH_MAX_LENGTH]; @@ -3658,6 +3678,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) core_len, MENU_FILE_DOWNLOAD_CORE); info->need_push = true; info->need_refresh = true; + info->need_clear = true; #endif break; case DISPLAYLIST_THUMBNAILS_UPDATER: @@ -3666,6 +3687,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) core_len, MENU_FILE_DOWNLOAD_THUMBNAIL_CONTENT); info->need_push = true; info->need_refresh = true; + info->need_clear = true; #endif break; case DISPLAYLIST_LAKKA: @@ -3674,6 +3696,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) core_len, MENU_FILE_DOWNLOAD_LAKKA); info->need_push = true; info->need_refresh = true; + info->need_clear = true; #endif break; case DISPLAYLIST_PLAYLIST_COLLECTION: diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h index 6458fa8d42..ed4df84320 100644 --- a/menu/menu_displaylist.h +++ b/menu/menu_displaylist.h @@ -115,7 +115,8 @@ enum menu_displaylist_ctl_state DISPLAYLIST_ARCHIVE_ACTION_DETECT_CORE, DISPLAYLIST_CORE_CONTENT, DISPLAYLIST_PROCESS, - DISPLAYLIST_PUSH_ONTO_STACK + DISPLAYLIST_PUSH_ONTO_STACK, + DISPLAYLIST_PENDING_CLEAR }; typedef struct menu_displaylist_info @@ -123,6 +124,7 @@ typedef struct menu_displaylist_info bool need_sort; bool need_refresh; bool need_push; + bool need_clear; file_list_t *list; file_list_t *menu_list; char path[PATH_MAX_LENGTH];