This commit is contained in:
kaysedwards 2025-06-26 09:58:51 -07:00 committed by GitHub
commit ffab3b24e7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 100 additions and 19 deletions

View File

@ -7210,6 +7210,7 @@ void input_driver_collect_system_input(input_driver_state_t *input_st,
switch (entry.type) switch (entry.type)
{ {
case FILE_TYPE_RPL_ENTRY: case FILE_TYPE_RPL_ENTRY:
case FILE_TYPE_DESCENDANT_ENTRY:
case FILE_TYPE_PLAYLIST_ENTRY: case FILE_TYPE_PLAYLIST_ENTRY:
case FILE_TYPE_PLAIN: case FILE_TYPE_PLAIN:
case FILE_TYPE_RDB: case FILE_TYPE_RDB:

View File

@ -2956,6 +2956,10 @@ MSG_HASH(
MENU_ENUM_LABEL_PLAYLIST_ENTRY, MENU_ENUM_LABEL_PLAYLIST_ENTRY,
"playlist_entry" "playlist_entry"
) )
MSG_HASH(
MENU_ENUM_LABEL_DESCENDANT_ENTRY,
"descendant_entry"
)
MSG_HASH( MSG_HASH(
MENU_ENUM_LABEL_PLAYLIST_SETTINGS, MENU_ENUM_LABEL_PLAYLIST_SETTINGS,
"playlist_settings" "playlist_settings"

View File

@ -79,6 +79,11 @@ int action_cancel_pop_default(const char *path,
filebrowser_clear_type(); filebrowser_clear_type();
} }
if (menu_type == FILE_TYPE_DESCENDANT_ENTRY
&& menu_st->driver_ctx
&& menu_st->driver_ctx->refresh_thumbnail_image)
menu_st->driver_ctx->refresh_thumbnail_image(menu_st->userdata, menu_st->selection_ptr);
new_selection_ptr = menu_st->selection_ptr; new_selection_ptr = menu_st->selection_ptr;
menu_entries_pop_stack(&new_selection_ptr, 0, 1); menu_entries_pop_stack(&new_selection_ptr, 0, 1);
menu_st->selection_ptr = new_selection_ptr; menu_st->selection_ptr = new_selection_ptr;

View File

@ -621,6 +621,7 @@ GENERIC_DEFERRED_PUSH_GENERAL(deferred_push_default, PUSH_DEFAULT, DISPLAYLIST_D
GENERIC_DEFERRED_PUSH_GENERAL(deferred_push_favorites_list, PUSH_DEFAULT, DISPLAYLIST_FAVORITES) GENERIC_DEFERRED_PUSH_GENERAL(deferred_push_favorites_list, PUSH_DEFAULT, DISPLAYLIST_FAVORITES)
GENERIC_DEFERRED_PUSH_GENERAL(deferred_playlist_list, PUSH_DEFAULT, DISPLAYLIST_PLAYLIST) GENERIC_DEFERRED_PUSH_GENERAL(deferred_playlist_list, PUSH_DEFAULT, DISPLAYLIST_PLAYLIST)
GENERIC_DEFERRED_PUSH_GENERAL(deferred_descendant_list, PUSH_DEFAULT, DISPLAYLIST_DESCENDANT_LIST)
GENERIC_DEFERRED_PUSH_GENERAL(deferred_music_history_list, PUSH_DEFAULT, DISPLAYLIST_MUSIC_HISTORY) GENERIC_DEFERRED_PUSH_GENERAL(deferred_music_history_list, PUSH_DEFAULT, DISPLAYLIST_MUSIC_HISTORY)
GENERIC_DEFERRED_PUSH_GENERAL(deferred_image_history_list, PUSH_DEFAULT, DISPLAYLIST_IMAGES_HISTORY) GENERIC_DEFERRED_PUSH_GENERAL(deferred_image_history_list, PUSH_DEFAULT, DISPLAYLIST_IMAGES_HISTORY)
GENERIC_DEFERRED_PUSH_GENERAL(deferred_video_history_list, PUSH_DEFAULT, DISPLAYLIST_VIDEO_HISTORY) GENERIC_DEFERRED_PUSH_GENERAL(deferred_video_history_list, PUSH_DEFAULT, DISPLAYLIST_VIDEO_HISTORY)
@ -776,6 +777,7 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
{MENU_ENUM_LABEL_DEFERRED_MUSIC, deferred_music_list}, {MENU_ENUM_LABEL_DEFERRED_MUSIC, deferred_music_list},
{MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST, deferred_music_history_list}, {MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST, deferred_music_history_list},
{MENU_ENUM_LABEL_DEFERRED_PLAYLIST_LIST, deferred_playlist_list}, {MENU_ENUM_LABEL_DEFERRED_PLAYLIST_LIST, deferred_playlist_list},
{MENU_ENUM_LABEL_DESCENDANT_ENTRY, deferred_descendant_list},
{MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST, deferred_image_history_list}, {MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST, deferred_image_history_list},
{MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST, deferred_video_history_list}, {MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST, deferred_video_history_list},
{MENU_ENUM_LABEL_DEFERRED_EXPLORE_LIST, deferred_explore_list}, {MENU_ENUM_LABEL_DEFERRED_EXPLORE_LIST, deferred_explore_list},

View File

@ -1181,6 +1181,7 @@ static int menu_cbs_init_bind_left_compare_type(menu_file_list_cbs_t *cbs,
case FILE_TYPE_RDB: case FILE_TYPE_RDB:
case FILE_TYPE_RDB_ENTRY: case FILE_TYPE_RDB_ENTRY:
case FILE_TYPE_RPL_ENTRY: case FILE_TYPE_RPL_ENTRY:
case FILE_TYPE_DESCENDANT_ENTRY:
case FILE_TYPE_SHADER: case FILE_TYPE_SHADER:
case FILE_TYPE_SHADER_PRESET: case FILE_TYPE_SHADER_PRESET:
case FILE_TYPE_IMAGE: case FILE_TYPE_IMAGE:

View File

@ -1076,6 +1076,16 @@ int generic_action_ok_displaylist_push(
menu->rpl_entry_selection_ptr = (unsigned)entry_idx; menu->rpl_entry_selection_ptr = (unsigned)entry_idx;
dl_type = DISPLAYLIST_GENERIC; dl_type = DISPLAYLIST_GENERIC;
break; break;
case ACTION_OK_DL_DESCENDANT_ENTRY:
fill_pathname_expand_special(menu->deferred_path, label, sizeof(menu->deferred_path));
info_label = msg_hash_to_str(MENU_ENUM_LABEL_DESCENDANT_ENTRY);
info_path = menu->deferred_path;
info.enum_idx = MENU_ENUM_LABEL_DESCENDANT_ENTRY;
info.directory_ptr = idx;
menu->rpl_entry_selection_ptr = (unsigned)entry_idx;
dl_type = DISPLAYLIST_DESCENDANT;
info.type = type;
break;
case ACTION_OK_DL_AUDIO_DSP_PLUGIN: case ACTION_OK_DL_AUDIO_DSP_PLUGIN:
filebrowser_clear_type(); filebrowser_clear_type();
info.directory_ptr = idx; info.directory_ptr = idx;
@ -6587,6 +6597,7 @@ STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_overlay_preset, ACTION_OK_DL_OVERLAY_PRE
STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_osk_overlay_preset, ACTION_OK_DL_OSK_OVERLAY_PRESET) STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_osk_overlay_preset, ACTION_OK_DL_OSK_OVERLAY_PRESET)
STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_video_font, ACTION_OK_DL_VIDEO_FONT) STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_video_font, ACTION_OK_DL_VIDEO_FONT)
STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_rpl_entry, ACTION_OK_DL_RPL_ENTRY) STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_rpl_entry, ACTION_OK_DL_RPL_ENTRY)
STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_descendant_entry, ACTION_OK_DL_DESCENDANT_ENTRY)
STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_open_archive, ACTION_OK_DL_OPEN_ARCHIVE) STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_open_archive, ACTION_OK_DL_OPEN_ARCHIVE)
STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_open_archive_detect_core, ACTION_OK_DL_OPEN_ARCHIVE_DETECT_CORE) STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_open_archive_detect_core, ACTION_OK_DL_OPEN_ARCHIVE_DETECT_CORE)
STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_file_load_music, ACTION_OK_DL_MUSIC) STATIC_DEFAULT_ACTION_OK_FUNC(action_ok_file_load_music, ACTION_OK_DL_MUSIC)
@ -9637,6 +9648,9 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
case FILE_TYPE_RPL_ENTRY: case FILE_TYPE_RPL_ENTRY:
BIND_ACTION_OK(cbs, action_ok_rpl_entry); BIND_ACTION_OK(cbs, action_ok_rpl_entry);
break; break;
case FILE_TYPE_DESCENDANT_ENTRY:
BIND_ACTION_OK(cbs, action_ok_descendant_entry);
break;
case FILE_TYPE_PLAYLIST_COLLECTION: case FILE_TYPE_PLAYLIST_COLLECTION:
BIND_ACTION_OK(cbs, action_ok_playlist_collection); BIND_ACTION_OK(cbs, action_ok_playlist_collection);
break; break;

View File

@ -1035,6 +1035,7 @@ static int menu_cbs_init_bind_right_compare_type(menu_file_list_cbs_t *cbs,
case FILE_TYPE_RDB: case FILE_TYPE_RDB:
case FILE_TYPE_RDB_ENTRY: case FILE_TYPE_RDB_ENTRY:
case FILE_TYPE_RPL_ENTRY: case FILE_TYPE_RPL_ENTRY:
case FILE_TYPE_DESCENDANT_ENTRY:
case FILE_TYPE_SHADER: case FILE_TYPE_SHADER:
case FILE_TYPE_SHADER_PRESET: case FILE_TYPE_SHADER_PRESET:
case FILE_TYPE_IMAGE: case FILE_TYPE_IMAGE:

View File

@ -271,6 +271,7 @@ static int menu_cbs_init_bind_scan_compare_type(menu_file_list_cbs_t *cbs,
return 0; return 0;
#endif #endif
case FILE_TYPE_RPL_ENTRY: case FILE_TYPE_RPL_ENTRY:
case FILE_TYPE_DESCENDANT_ENTRY:
BIND_ACTION_SCAN(cbs, action_switch_thumbnail); BIND_ACTION_SCAN(cbs, action_switch_thumbnail);
return 0; return 0;

View File

@ -1856,6 +1856,7 @@ int menu_cbs_init_bind_title(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_NETPLAY_MITM_SERVER, action_get_title_dropdown_item}, {MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_NETPLAY_MITM_SERVER, action_get_title_dropdown_item},
#endif #endif
{MENU_ENUM_LABEL_DEFERRED_RPL_ENTRY_ACTIONS, action_get_quick_menu_views_settings_list}, {MENU_ENUM_LABEL_DEFERRED_RPL_ENTRY_ACTIONS, action_get_quick_menu_views_settings_list},
{MENU_ENUM_LABEL_DESCENDANT_ENTRY, action_get_title_deferred_playlist_list},
{MENU_ENUM_LABEL_DEFERRED_PLAYLIST_LIST, action_get_title_deferred_playlist_list}, {MENU_ENUM_LABEL_DEFERRED_PLAYLIST_LIST, action_get_title_deferred_playlist_list},
{MENU_ENUM_LABEL_DEFERRED_PLAYLIST_MANAGER_SETTINGS, action_get_title_deferred_playlist_list}, {MENU_ENUM_LABEL_DEFERRED_PLAYLIST_MANAGER_SETTINGS, action_get_title_deferred_playlist_list},
{MENU_ENUM_LABEL_PLAYLISTS_TAB, action_get_title_collection}, {MENU_ENUM_LABEL_PLAYLISTS_TAB, action_get_title_collection},
@ -1869,6 +1870,7 @@ int menu_cbs_init_bind_title(menu_file_list_cbs_t *cbs,
if (cbs->enum_idx != MENU_ENUM_LABEL_PLAYLIST_ENTRY && if (cbs->enum_idx != MENU_ENUM_LABEL_PLAYLIST_ENTRY &&
cbs->enum_idx != MENU_ENUM_LABEL_EXPLORE_ITEM && cbs->enum_idx != MENU_ENUM_LABEL_EXPLORE_ITEM &&
cbs->enum_idx != MENU_ENUM_LABEL_DESCENDANT_ENTRY &&
menu_cbs_init_bind_title_compare_label(cbs, label) == 0) menu_cbs_init_bind_title_compare_label(cbs, label) == 0)
return 0; return 0;

View File

@ -9506,6 +9506,7 @@ static void materialui_populate_entries(void *data, const char *path,
| MUI_FLAG_IS_DROPDOWN_LIST); | MUI_FLAG_IS_DROPDOWN_LIST);
if ( string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_PLAYLIST_LIST)) if ( string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_PLAYLIST_LIST))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DESCENDANT_ENTRY))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST))
@ -9587,7 +9588,8 @@ static void materialui_populate_entries(void *data, const char *path,
if ( (list) if ( (list)
&& (list_size > 0) && (list_size > 0)
&& (list->list[0].type == FILE_TYPE_RPL_ENTRY)) && ((list->list[0].type == FILE_TYPE_RPL_ENTRY)
|| (list->list[0].type == FILE_TYPE_DESCENDANT_ENTRY)))
mui->playlist = playlist_get_cached(); mui->playlist = playlist_get_cached();
} }
@ -11508,6 +11510,7 @@ static void materialui_list_insert(void *userdata,
node->icon_type = MUI_ICON_TYPE_NONE; node->icon_type = MUI_ICON_TYPE_NONE;
break; break;
case FILE_TYPE_RPL_ENTRY: case FILE_TYPE_RPL_ENTRY:
case FILE_TYPE_DESCENDANT_ENTRY:
case MENU_SETTING_DROPDOWN_ITEM: case MENU_SETTING_DROPDOWN_ITEM:
case MENU_SETTING_DROPDOWN_ITEM_RESOLUTION: case MENU_SETTING_DROPDOWN_ITEM_RESOLUTION:
case MENU_SETTING_DROPDOWN_ITEM_VIDEO_SHADER_PARAM: case MENU_SETTING_DROPDOWN_ITEM_VIDEO_SHADER_PARAM:

View File

@ -2321,6 +2321,7 @@ static uintptr_t ozone_entries_icon_get_texture(
case FILE_TYPE_IN_CARCHIVE: case FILE_TYPE_IN_CARCHIVE:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_FILE]; return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_FILE];
case FILE_TYPE_RPL_ENTRY: case FILE_TYPE_RPL_ENTRY:
case FILE_TYPE_DESCENDANT_ENTRY:
case FILE_TYPE_PLAYLIST_COLLECTION: case FILE_TYPE_PLAYLIST_COLLECTION:
switch (ozone->tabs[ozone->categories_selection_ptr]) switch (ozone->tabs[ozone->categories_selection_ptr])
{ {
@ -3728,14 +3729,19 @@ static bool ozone_is_main_menu_playlist(void *userdata)
{ {
ozone_handle_t *ozone = (ozone_handle_t*)userdata; ozone_handle_t *ozone = (ozone_handle_t*)userdata;
menu_entry_t entry; menu_entry_t entry;
MENU_ENTRY_INITIALIZE(entry);
menu_entry_get(&entry, 0, 0, NULL, true);
if (entry.type == FILE_TYPE_DESCENDANT_ENTRY)
return true;
if ( (ozone->depth != 3) if ( (ozone->depth != 3)
|| (ozone->flags & OZONE_FLAG_IS_DB_MANAGER_LIST) || (ozone->flags & OZONE_FLAG_IS_DB_MANAGER_LIST)
|| (ozone->flags & OZONE_FLAG_IS_FILE_LIST)) || (ozone->flags & OZONE_FLAG_IS_FILE_LIST))
return false; return false;
MENU_ENTRY_INITIALIZE(entry);
menu_entry_get(&entry, 0, 0, NULL, true);
return entry.type == FILE_TYPE_RPL_ENTRY; return entry.type == FILE_TYPE_RPL_ENTRY;
} }
@ -4176,7 +4182,7 @@ static void ozone_update_content_metadata(ozone_handle_t *ozone)
if (!string_is_empty(menu_st->thumbnail_path_data->content_core_name)) if (!string_is_empty(menu_st->thumbnail_path_data->content_core_name))
{ {
if ( string_is_equal( if ( (string_is_equal(
menu_st->thumbnail_path_data->content_core_name, menu_st->thumbnail_path_data->content_core_name,
"imageviewer") "imageviewer")
|| string_is_equal( || string_is_equal(
@ -4185,6 +4191,8 @@ static void ozone_update_content_metadata(ozone_handle_t *ozone)
|| string_is_equal( || string_is_equal(
menu_st->thumbnail_path_data->content_core_name, menu_st->thumbnail_path_data->content_core_name,
"movieplayer")) "movieplayer"))
&& (( !(ozone->flags & OZONE_FLAG_IS_PLAYLIST))
&& ( !(ozone->flags2 & OZONE_FLAG2_IS_QUICK_MENU))))
ozone->flags2 |= OZONE_FLAG2_SELECTION_CORE_IS_VIEWER; ozone->flags2 |= OZONE_FLAG2_SELECTION_CORE_IS_VIEWER;
else else
ozone->flags2 &= ~OZONE_FLAG2_SELECTION_CORE_IS_VIEWER; ozone->flags2 &= ~OZONE_FLAG2_SELECTION_CORE_IS_VIEWER;
@ -4242,7 +4250,8 @@ static void ozone_update_content_metadata(ozone_handle_t *ozone)
* to the selected entry */ * to the selected entry */
else if (list else if (list
&& (selection < list_size) && (selection < list_size)
&& (list->list[selection].type == FILE_TYPE_RPL_ENTRY)) && ((list->list[selection].type == FILE_TYPE_RPL_ENTRY)
|| (list->list[selection].type == FILE_TYPE_DESCENDANT_ENTRY)))
{ {
playlist_index = list->list[selection].entry_idx; playlist_index = list->list[selection].entry_idx;
@ -5947,7 +5956,7 @@ border_iterate:
if (texture) if (texture)
{ {
/* Console specific icons */ /* Console specific icons */
if ( entry.type == FILE_TYPE_RPL_ENTRY if ( (entry.type == FILE_TYPE_RPL_ENTRY)
&& ozone->categories_selection_ptr > ozone->system_tab_end) && ozone->categories_selection_ptr > ozone->system_tab_end)
{ {
ozone_node_t *sidebar_node = (ozone_node_t*) ozone_node_t *sidebar_node = (ozone_node_t*)
@ -6021,7 +6030,7 @@ border_iterate:
} }
} }
/* History/Favorite console specific content icons */ /* History/Favorite console specific content icons */
else if ( entry.type == FILE_TYPE_RPL_ENTRY else if ( (entry.type == FILE_TYPE_RPL_ENTRY)
&& show_history_icons != PLAYLIST_SHOW_HISTORY_ICONS_DEFAULT) && show_history_icons != PLAYLIST_SHOW_HISTORY_ICONS_DEFAULT)
{ {
switch (ozone->tabs[ozone->categories_selection_ptr]) switch (ozone->tabs[ozone->categories_selection_ptr])
@ -7723,7 +7732,8 @@ static void ozone_set_thumbnail_content(void *data, const char *s)
* to the selected entry */ * to the selected entry */
if ( list if ( list
&& (selection < list_size) && (selection < list_size)
&& (list->list[selection].type == FILE_TYPE_RPL_ENTRY)) && ((list->list[selection].type == FILE_TYPE_RPL_ENTRY)
|| (list->list[selection].type == FILE_TYPE_DESCENDANT_ENTRY)))
{ {
selection = list->list[selection].entry_idx; selection = list->list[selection].entry_idx;
pl = playlist_get_cached(); pl = playlist_get_cached();
@ -8001,6 +8011,7 @@ static bool ozone_manage_available(ozone_handle_t *ozone, size_t current_selecti
{ {
case FILE_TYPE_PLAYLIST_COLLECTION: case FILE_TYPE_PLAYLIST_COLLECTION:
case FILE_TYPE_RPL_ENTRY: case FILE_TYPE_RPL_ENTRY:
case FILE_TYPE_DESCENDANT_ENTRY:
return true; return true;
default: default:
break; break;
@ -11749,8 +11760,7 @@ static void ozone_selection_changed(ozone_handle_t *ozone, bool allow_animation)
bool update_thumbnails = false; bool update_thumbnails = false;
/* Playlist updates */ /* Playlist updates */
if ( (ozone->flags & OZONE_FLAG_IS_PLAYLIST) if (ozone->flags & OZONE_FLAG_IS_PLAYLIST)
&& (ozone->depth == 1 || ozone->depth == 3))
{ {
ozone_set_thumbnail_content(ozone, ""); ozone_set_thumbnail_content(ozone, "");
update_thumbnails = true; update_thumbnails = true;
@ -12425,7 +12435,7 @@ static void ozone_populate_entries(
if (!list || (list->size < 1)) if (!list || (list->size < 1))
goto_sidebar = true; goto_sidebar = true;
else if ((list->list[0].type != FILE_TYPE_RPL_ENTRY)) else if (list->list[0].type != FILE_TYPE_RPL_ENTRY)
goto_sidebar = true; goto_sidebar = true;
if (goto_sidebar) if (goto_sidebar)
@ -12502,7 +12512,8 @@ static void ozone_populate_entries(
else else
ozone->flags &= ~OZONE_FLAG_IS_STATE_SLOT; ozone->flags &= ~OZONE_FLAG_IS_STATE_SLOT;
if (ozone_is_playlist(ozone, true)) if (ozone_is_playlist(ozone, true)
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DESCENDANT_ENTRY)))
ozone->flags |= OZONE_FLAG_IS_PLAYLIST; ozone->flags |= OZONE_FLAG_IS_PLAYLIST;
else else
ozone->flags &= ~OZONE_FLAG_IS_PLAYLIST; ozone->flags &= ~OZONE_FLAG_IS_PLAYLIST;
@ -12642,7 +12653,7 @@ static void ozone_populate_entries(
* and savestate slots */ * and savestate slots */
if ( if (
( (ozone->flags & OZONE_FLAG_WANT_THUMBNAIL_BAR)) ( (ozone->flags & OZONE_FLAG_WANT_THUMBNAIL_BAR))
&& ( ((ozone->flags & OZONE_FLAG_IS_PLAYLIST) && (ozone->depth == 1 || ozone->depth == 3)) && ( ((ozone->flags & OZONE_FLAG_IS_PLAYLIST))
|| ((ozone->flags & OZONE_FLAG_IS_DB_MANAGER_LIST) && (ozone->depth >= 4)) || ((ozone->flags & OZONE_FLAG_IS_DB_MANAGER_LIST) && (ozone->depth >= 4))
|| (ozone->flags & OZONE_FLAG_IS_EXPLORE_LIST) || (ozone->flags & OZONE_FLAG_IS_EXPLORE_LIST)
|| (ozone->flags & OZONE_FLAG_IS_FILE_LIST) || (ozone->flags & OZONE_FLAG_IS_FILE_LIST)

View File

@ -7027,7 +7027,8 @@ static void rgui_scan_selected_entry_thumbnail(rgui_t *rgui, bool force_load)
* to the selected entry */ * to the selected entry */
if ( (list) if ( (list)
&& (selection < list_size) && (selection < list_size)
&& (list->list[selection].type == FILE_TYPE_RPL_ENTRY)) && ((list->list[selection].type == FILE_TYPE_RPL_ENTRY)
|| (list->list[selection].type == FILE_TYPE_DESCENDANT_ENTRY)))
{ {
playlist_valid = true; playlist_valid = true;
playlist_index = list->list[selection].entry_idx; playlist_index = list->list[selection].entry_idx;
@ -7385,6 +7386,7 @@ static void rgui_populate_entries(
/* Check whether we are currently viewing a playlist */ /* Check whether we are currently viewing a playlist */
if ( string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_PLAYLIST_LIST)) if ( string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_PLAYLIST_LIST))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DESCENDANT_ENTRY))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST))

View File

@ -1473,7 +1473,8 @@ static void xmb_set_thumbnail_content(void *data, const char *s)
* to the selected entry */ * to the selected entry */
if ( list if ( list
&& (selection < list_size) && (selection < list_size)
&& (list->list[selection].type == FILE_TYPE_RPL_ENTRY)) && ((list->list[selection].type == FILE_TYPE_RPL_ENTRY)
|| (list->list[selection].type == FILE_TYPE_DESCENDANT_ENTRY)))
{ {
playlist_valid = true; playlist_valid = true;
playlist_index = list->list[selection].entry_idx; playlist_index = list->list[selection].entry_idx;
@ -1722,7 +1723,8 @@ static void xmb_set_dynamic_icon_content(
* to the selected entry */ * to the selected entry */
if ( list if ( list
&& (selection < list_size) && (selection < list_size)
&& (list->list[selection].type == FILE_TYPE_RPL_ENTRY)) && ((list->list[selection].type == FILE_TYPE_RPL_ENTRY)
|| (list->list[selection].type == FILE_TYPE_DESCENDANT_ENTRY)))
{ {
playlist_valid = true; playlist_valid = true;
playlist_index = list->list[selection].entry_idx; playlist_index = list->list[selection].entry_idx;
@ -3101,7 +3103,8 @@ static void xmb_populate_entries(void *data,
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST)); || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DESCENDANT_ENTRY));
xmb->is_playlist |= xmb->is_playlist |=
(xmb_horizontal_type == FILE_TYPE_PLAYLIST_COLLECTION) (xmb_horizontal_type == FILE_TYPE_PLAYLIST_COLLECTION)
@ -3152,6 +3155,8 @@ static void xmb_populate_entries(void *data,
xmb->is_quick_menu = xmb->is_quick_menu =
string_is_equal(label, string_is_equal(label,
msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RPL_ENTRY_ACTIONS)) msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RPL_ENTRY_ACTIONS))
|| string_is_equal(label,
msg_hash_to_str(MENU_ENUM_LABEL_DESCENDANT_ENTRY))
|| string_is_equal(label, || string_is_equal(label,
msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_SETTINGS)) msg_hash_to_str(MENU_ENUM_LABEL_CONTENT_SETTINGS))
|| string_is_equal(label, || string_is_equal(label,
@ -3839,6 +3844,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
case FILE_TYPE_IN_CARCHIVE: case FILE_TYPE_IN_CARCHIVE:
return xmb->textures.list[XMB_TEXTURE_FILE]; return xmb->textures.list[XMB_TEXTURE_FILE];
case FILE_TYPE_RPL_ENTRY: case FILE_TYPE_RPL_ENTRY:
case FILE_TYPE_DESCENDANT_ENTRY:
case FILE_TYPE_PLAYLIST_COLLECTION: case FILE_TYPE_PLAYLIST_COLLECTION:
if (core_node) if (core_node)
return core_node->content_icon; return core_node->content_icon;
@ -3859,6 +3865,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
switch (type) switch (type)
{ {
case FILE_TYPE_RPL_ENTRY: case FILE_TYPE_RPL_ENTRY:
case FILE_TYPE_DESCENDANT_ENTRY:
return db_node->content_icon; return db_node->content_icon;
case FILE_TYPE_PLAYLIST_COLLECTION: case FILE_TYPE_PLAYLIST_COLLECTION:
return db_node->icon; return db_node->icon;
@ -5250,7 +5257,7 @@ static int xmb_draw_item(
texture = sidebar_node->icon; texture = sidebar_node->icon;
} }
/* History/Favorite console specific content icons */ /* History/Favorite console specific content icons */
else if (entry_type == FILE_TYPE_RPL_ENTRY else if ((entry_type == FILE_TYPE_RPL_ENTRY)
&& show_history_icons != PLAYLIST_SHOW_HISTORY_ICONS_DEFAULT) && show_history_icons != PLAYLIST_SHOW_HISTORY_ICONS_DEFAULT)
{ {
switch (xmb_get_system_tab(xmb, (unsigned)xmb->categories_selection_ptr)) switch (xmb_get_system_tab(xmb, (unsigned)xmb->categories_selection_ptr))

View File

@ -74,6 +74,7 @@ enum
ACTION_OK_DL_MANUAL_SCAN_DIR_LIST, ACTION_OK_DL_MANUAL_SCAN_DIR_LIST,
ACTION_OK_DL_HELP, ACTION_OK_DL_HELP,
ACTION_OK_DL_RPL_ENTRY, ACTION_OK_DL_RPL_ENTRY,
ACTION_OK_DL_DESCENDANT_ENTRY,
ACTION_OK_DL_RDB_ENTRY, ACTION_OK_DL_RDB_ENTRY,
ACTION_OK_DL_RDB_ENTRY_SUBMENU, ACTION_OK_DL_RDB_ENTRY_SUBMENU,
ACTION_OK_DL_CDROM_INFO_LIST, ACTION_OK_DL_CDROM_INFO_LIST,

View File

@ -2503,6 +2503,8 @@ static int menu_displaylist_parse_playlist(
bool pl_show_sublabels = settings->bools.playlist_show_sublabels; bool pl_show_sublabels = settings->bools.playlist_show_sublabels;
void (*sanitization)(char*) = NULL; void (*sanitization)(char*) = NULL;
unsigned count = 0; unsigned count = 0;
enum msg_file_type type_target = FILE_TYPE_RPL_ENTRY;
enum msg_hash_enums enum_idx = MENU_ENUM_LABEL_PLAYLIST_ENTRY;
if (list_size == 0) if (list_size == 0)
return 0; return 0;
@ -2667,10 +2669,17 @@ static int menu_displaylist_parse_playlist(
} }
} }
if (entry && string_is_equal(entry->core_path, "virtual")
&& string_is_equal(entry->core_name, "playlist"))
{
type_target = FILE_TYPE_DESCENDANT_ENTRY;
enum_idx = MENU_ENUM_LABEL_DESCENDANT_ENTRY;
}
/* Add menu entry */ /* Add menu entry */
if (entry_valid && menu_entries_append(info_list, if (entry_valid && menu_entries_append(info_list,
menu_entry_lbl, entry_path, menu_entry_lbl, entry_path,
MENU_ENUM_LABEL_PLAYLIST_ENTRY, FILE_TYPE_RPL_ENTRY, 0, i, NULL)) enum_idx, type_target, 0, i, NULL))
count++; count++;
} }
@ -15539,6 +15548,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
case DISPLAYLIST_FILE_BROWSER_SELECT_CORE: case DISPLAYLIST_FILE_BROWSER_SELECT_CORE:
case DISPLAYLIST_FILE_BROWSER_SELECT_COLLECTION: case DISPLAYLIST_FILE_BROWSER_SELECT_COLLECTION:
case DISPLAYLIST_GENERIC: case DISPLAYLIST_GENERIC:
case DISPLAYLIST_DESCENDANT:
info->flags |= MD_FLAG_NEED_NAVIGATION_CLEAR; info->flags |= MD_FLAG_NEED_NAVIGATION_CLEAR;
/* fall-through */ /* fall-through */
case DISPLAYLIST_PENDING_CLEAR: case DISPLAYLIST_PENDING_CLEAR:
@ -15717,6 +15727,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
use_filebrowser = true; use_filebrowser = true;
break; break;
case DISPLAYLIST_PLAYLIST: case DISPLAYLIST_PLAYLIST:
case DISPLAYLIST_DESCENDANT_LIST:
{ {
const char *_msg = path_basename_nocompression(info->path); const char *_msg = path_basename_nocompression(info->path);
menu_entries_clear(info->list); menu_entries_clear(info->list);

View File

@ -101,6 +101,8 @@ enum menu_displaylist_ctl_state
DISPLAYLIST_CONTENTLESS_CORES, DISPLAYLIST_CONTENTLESS_CORES,
DISPLAYLIST_FAVORITES, DISPLAYLIST_FAVORITES,
DISPLAYLIST_PLAYLIST, DISPLAYLIST_PLAYLIST,
DISPLAYLIST_DESCENDANT,
DISPLAYLIST_DESCENDANT_LIST,
DISPLAYLIST_VIDEO_HISTORY, DISPLAYLIST_VIDEO_HISTORY,
DISPLAYLIST_MUSIC_HISTORY, DISPLAYLIST_MUSIC_HISTORY,
DISPLAYLIST_IMAGES_HISTORY, DISPLAYLIST_IMAGES_HISTORY,

View File

@ -3330,6 +3330,7 @@ bool menu_driver_search_filter_enabled(const char *label, unsigned type)
|| (type == MENU_IMAGES_TAB) || (type == MENU_IMAGES_TAB)
|| (type == MENU_MUSIC_TAB) || (type == MENU_MUSIC_TAB)
|| (type == MENU_VIDEO_TAB) || (type == MENU_VIDEO_TAB)
|| (type == FILE_TYPE_DESCENDANT_ENTRY)
|| (type == FILE_TYPE_PLAYLIST_COLLECTION); || (type == FILE_TYPE_PLAYLIST_COLLECTION);
if (!filter_enabled && !string_is_empty(label)) if (!filter_enabled && !string_is_empty(label))
@ -7914,6 +7915,16 @@ int generic_menu_entry_action(
flush_target = msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RPL_ENTRY_ACTIONS); flush_target = msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RPL_ENTRY_ACTIONS);
break; break;
} }
else if ( string_is_equal(parent_label,
msg_hash_to_str(MENU_ENUM_LABEL_DESCENDANT_ENTRY))
&& (!string_is_empty(deferred_path)
&& !string_is_empty(content_path)
&& string_is_equal(deferred_path, content_path))
)
{
flush_target = msg_hash_to_str(MENU_ENUM_LABEL_DESCENDANT_ENTRY);
break;
}
/* If core was launched via 'Contentless Cores' menu, /* If core was launched via 'Contentless Cores' menu,
* flush to 'Contentless Cores' menu */ * flush to 'Contentless Cores' menu */
else if ( string_is_equal(parent_label, else if ( string_is_equal(parent_label,

View File

@ -82,6 +82,7 @@ enum msg_file_type
FILE_TYPE_RDB, FILE_TYPE_RDB,
FILE_TYPE_RDB_ENTRY, FILE_TYPE_RDB_ENTRY,
FILE_TYPE_RPL_ENTRY, FILE_TYPE_RPL_ENTRY,
FILE_TYPE_DESCENDANT_ENTRY,
FILE_TYPE_BOOL_ON, FILE_TYPE_BOOL_ON,
FILE_TYPE_BOOL_OFF, FILE_TYPE_BOOL_OFF,
FILE_TYPE_RECORD_CONFIG, FILE_TYPE_RECORD_CONFIG,
@ -876,6 +877,7 @@ enum msg_hash_enums
#endif #endif
MENU_ENUM_LABEL_PLAYLIST_COLLECTION_ENTRY, MENU_ENUM_LABEL_PLAYLIST_COLLECTION_ENTRY,
MENU_ENUM_LABEL_PLAYLIST_ENTRY, MENU_ENUM_LABEL_PLAYLIST_ENTRY,
MENU_ENUM_LABEL_DESCENDANT_ENTRY,
MENU_LABEL(START_VIDEO_PROCESSOR), MENU_LABEL(START_VIDEO_PROCESSOR),
MENU_LABEL(START_NET_RETROPAD), MENU_LABEL(START_NET_RETROPAD),