From 81972149fc96126277689d4beb37a5c5efc5f423 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 30 Dec 2019 08:02:13 +0100 Subject: [PATCH] Submenu system is now properly hidden --- menu/drivers/materialui.c | 7 +++-- menu/drivers/ozone/ozone.c | 7 +++-- menu/drivers/stripes.c | 54 +++----------------------------------- menu/drivers/xmb.c | 7 +++-- menu/menu_displaylist.c | 27 ++++++++++++++----- menu/menu_displaylist.h | 2 ++ 6 files changed, 41 insertions(+), 63 deletions(-) diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 922c854c71..83eaff0e6c 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -6678,8 +6678,11 @@ static int materialui_list_push(void *data, void *userdata, entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST; menu_displaylist_setting(&entry); - entry.enum_idx = MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS; - menu_displaylist_setting(&entry); + if (menu_displaylist_has_subsystems()) + { + entry.enum_idx = MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS; + menu_displaylist_setting(&entry); + } } if (settings->bools.menu_content_show_history) diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index 69e9df06fe..98c377b273 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -834,8 +834,11 @@ static int ozone_list_push(void *data, void *userdata, entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST; menu_displaylist_setting(&entry); - entry.enum_idx = MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS; - menu_displaylist_setting(&entry); + if (menu_displaylist_has_subsystems()) + { + entry.enum_idx = MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS; + menu_displaylist_setting(&entry); + } } if (settings->bools.menu_show_load_disc) diff --git a/menu/drivers/stripes.c b/menu/drivers/stripes.c index f503dfe7c1..2ca8eac486 100644 --- a/menu/drivers/stripes.c +++ b/menu/drivers/stripes.c @@ -4211,61 +4211,13 @@ static int stripes_list_push(void *data, void *userdata, if (settings->bools.menu_show_load_content) { - const struct retro_subsystem_info* subsystem = NULL; - entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST; menu_displaylist_setting(&entry); - subsystem = system->subsystem.data; - - if (subsystem) + if (menu_displaylist_has_subsystems()) { - for (i = 0; i < system->subsystem.size; i++, subsystem++) - { - char s[PATH_MAX_LENGTH]; - if (content_get_subsystem() == i) - { - if (content_get_subsystem_rom_id() < subsystem->num_roms) - { - snprintf(s, sizeof(s), - "Load %s %s", - subsystem->desc, - i == content_get_subsystem() - ? "\u2605" : " "); - menu_entries_append_enum(info->list, - s, - msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD), - MENU_ENUM_LABEL_SUBSYSTEM_ADD, - MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0); - } - else - { - snprintf(s, sizeof(s), - "Start %s %s", - subsystem->desc, - i == content_get_subsystem() - ? "\u2605" : " "); - menu_entries_append_enum(info->list, - s, - msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_LOAD), - MENU_ENUM_LABEL_SUBSYSTEM_LOAD, - MENU_SETTINGS_SUBSYSTEM_LOAD, 0, 0); - } - } - else - { - snprintf(s, sizeof(s), - "Load %s %s", - subsystem->desc, - i == content_get_subsystem() - ? "\u2605" : " "); - menu_entries_append_enum(info->list, - s, - msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD), - MENU_ENUM_LABEL_SUBSYSTEM_ADD, - MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0); - } - } + entry.enum_idx = MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS; + menu_displaylist_setting(&entry); } } diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index b0ee9ac65d..5433da4692 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -6181,8 +6181,11 @@ static int xmb_list_push(void *data, void *userdata, entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST; menu_displaylist_setting(&entry); - entry.enum_idx = MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS; - menu_displaylist_setting(&entry); + if (menu_displaylist_has_subsystems()) + { + entry.enum_idx = MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS; + menu_displaylist_setting(&entry); + } } diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index a78d673d30..8a4aa087ff 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -7019,7 +7019,7 @@ static unsigned menu_displaylist_populate_subsystem( * character fallback) */ snprintf(star_char, sizeof(star_char), "%s", is_rgui ? "*" : utf8_star_char); - if (subsystem && subsystem_current_count > 0) + if (menu_displaylist_has_subsystems()) { for (i = 0; i < subsystem_current_count; i++, subsystem++) { @@ -7277,6 +7277,19 @@ unsigned menu_displaylist_netplay_refresh_rooms(file_list_t *list) return count; } +bool menu_displaylist_has_subsystems(void) +{ + const struct retro_subsystem_info* subsystem = subsystem_data; + rarch_system_info_t *sys_info = + runloop_get_system_info(); + /* Core not loaded completely, use the data we + * peeked on load core */ + /* Core fully loaded, use the subsystem data */ + if (sys_info && sys_info->subsystem.data) + subsystem = sys_info->subsystem.data; + return (subsystem && subsystem_current_count > 0); +} + bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist_info_t *info) { @@ -9541,11 +9554,13 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, PARSE_ACTION, false) == 0) count++; - /* Core fully loaded, use the subsystem data */ - if (sys_info && sys_info->subsystem.data) - subsystem = sys_info->subsystem.data; - - menu_displaylist_populate_subsystem(subsystem, info->list); + if (menu_displaylist_has_subsystems()) + { + if (menu_displaylist_parse_settings_enum(info->list, + MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS, + PARSE_ACTION, false) == 0) + count++; + } } if (settings->bools.menu_content_show_history) diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h index 8e4717cd01..302574f8a2 100644 --- a/menu/menu_displaylist.h +++ b/menu/menu_displaylist.h @@ -306,6 +306,8 @@ bool menu_displaylist_setting(menu_displaylist_ctx_parse_entry_t *entry); unsigned menu_displaylist_netplay_refresh_rooms(file_list_t *list); #endif +bool menu_displaylist_has_subsystems(void); + RETRO_END_DECLS #endif