commit
e33dfb53cf
|
@ -1901,7 +1901,7 @@ bool command_event(enum event_command cmd, void *data)
|
||||||
case CMD_EVENT_LOAD_CORE:
|
case CMD_EVENT_LOAD_CORE:
|
||||||
{
|
{
|
||||||
bool success = false;
|
bool success = false;
|
||||||
subsystem_size = 0;
|
subsystem_current_count = 0;
|
||||||
content_clear_subsystem();
|
content_clear_subsystem();
|
||||||
success = command_event(CMD_EVENT_LOAD_CORE_PERSIST, NULL);
|
success = command_event(CMD_EVENT_LOAD_CORE_PERSIST, NULL);
|
||||||
(void)success;
|
(void)success;
|
||||||
|
@ -2045,7 +2045,7 @@ bool command_event(enum event_command cmd, void *data)
|
||||||
#endif
|
#endif
|
||||||
if (is_inited)
|
if (is_inited)
|
||||||
{
|
{
|
||||||
subsystem_size = 0;
|
subsystem_current_count = 0;
|
||||||
content_clear_subsystem();
|
content_clear_subsystem();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
29
dynamic.c
29
dynamic.c
|
@ -188,7 +188,7 @@ static bool environ_cb_get_system_info(unsigned cmd, void *data)
|
||||||
unsigned size = i;
|
unsigned size = i;
|
||||||
const struct retro_subsystem_info *info =
|
const struct retro_subsystem_info *info =
|
||||||
(const struct retro_subsystem_info*)data;
|
(const struct retro_subsystem_info*)data;
|
||||||
subsystem_size = 0;
|
subsystem_current_count = 0;
|
||||||
RARCH_LOG("Environ SET_SUBSYSTEM_INFO.\n");
|
RARCH_LOG("Environ SET_SUBSYSTEM_INFO.\n");
|
||||||
|
|
||||||
for (i = 0; info[i].ident; i++)
|
for (i = 0; info[i].ident; i++)
|
||||||
|
@ -207,18 +207,24 @@ static bool environ_cb_get_system_info(unsigned cmd, void *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
RARCH_LOG("Subsystems: %d\n", i);
|
RARCH_LOG("Subsystems: %d\n", i);
|
||||||
size = i;
|
size = i;
|
||||||
|
|
||||||
|
if (size > SUBSYSTEM_MAX_SUBSYSTEMS)
|
||||||
|
RARCH_WARN("Subsystems exceed subsystem max, clamping to %d\n", SUBSYSTEM_MAX_SUBSYSTEMS);
|
||||||
|
|
||||||
if (system)
|
if (system)
|
||||||
{
|
{
|
||||||
for (i = 0; i < size; i++)
|
for (i = 0; i < size && i < SUBSYSTEM_MAX_SUBSYSTEMS; i++)
|
||||||
{
|
{
|
||||||
subsystem_data[i].desc = strdup(info[i].desc);
|
subsystem_data[i].desc = strdup(info[i].desc);
|
||||||
subsystem_data[i].ident = strdup(info[i].ident);
|
subsystem_data[i].ident = strdup(info[i].ident);
|
||||||
subsystem_data[i].id = info[i].id;
|
subsystem_data[i].id = info[i].id;
|
||||||
subsystem_data[i].num_roms = info[i].num_roms;
|
subsystem_data[i].num_roms = info[i].num_roms;
|
||||||
|
|
||||||
for (j = 0; j < subsystem_data[i].num_roms; j++)
|
if (subsystem_data[i].num_roms > SUBSYSTEM_MAX_SUBSYSTEM_ROMS)
|
||||||
|
RARCH_WARN("Subsystems exceed subsystem max roms, clamping to %d\n", SUBSYSTEM_MAX_SUBSYSTEM_ROMS);
|
||||||
|
|
||||||
|
for (j = 0; j < subsystem_data[i].num_roms && j < SUBSYSTEM_MAX_SUBSYSTEM_ROMS; j++)
|
||||||
{
|
{
|
||||||
subsystem_data_roms[i][j].desc = strdup(info[i].roms[j].desc);
|
subsystem_data_roms[i][j].desc = strdup(info[i].roms[j].desc);
|
||||||
subsystem_data_roms[i][j].valid_extensions = strdup(info[i].roms[j].valid_extensions);
|
subsystem_data_roms[i][j].valid_extensions = strdup(info[i].roms[j].valid_extensions);
|
||||||
|
@ -229,15 +235,19 @@ static bool environ_cb_get_system_info(unsigned cmd, void *data)
|
||||||
subsystem_data[i].roms = subsystem_data_roms[i];
|
subsystem_data[i].roms = subsystem_data_roms[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < size; i++)
|
|
||||||
|
subsystem_current_count = size <= SUBSYSTEM_MAX_SUBSYSTEMS ? size : SUBSYSTEM_MAX_SUBSYSTEMS;
|
||||||
|
#if 0
|
||||||
|
RARCH_LOG("Subsystems: %d\n", subsystem_current_count);
|
||||||
|
|
||||||
|
for (i = 0; i < subsystem_current_count; i++)
|
||||||
{
|
{
|
||||||
#if 1
|
|
||||||
RARCH_LOG("Subsystem ID: %d\n", i);
|
RARCH_LOG("Subsystem ID: %d\n", i);
|
||||||
RARCH_LOG("Special game type: %s\n", subsystem_data[i].desc);
|
RARCH_LOG("Special game type: %s\n", subsystem_data[i].desc);
|
||||||
RARCH_LOG(" Ident: %s\n", subsystem_data[i].ident);
|
RARCH_LOG(" Ident: %s\n", subsystem_data[i].ident);
|
||||||
RARCH_LOG(" ID: %u\n", subsystem_data[i].id);
|
RARCH_LOG(" ID: %u\n", subsystem_data[i].id);
|
||||||
RARCH_LOG(" Content:\n");
|
RARCH_LOG(" Content:\n");
|
||||||
#endif
|
|
||||||
for (j = 0; j < subsystem_data[i].num_roms; j++)
|
for (j = 0; j < subsystem_data[i].num_roms; j++)
|
||||||
{
|
{
|
||||||
RARCH_LOG(" %s (%s)\n",
|
RARCH_LOG(" %s (%s)\n",
|
||||||
|
@ -245,9 +255,7 @@ static bool environ_cb_get_system_info(unsigned cmd, void *data)
|
||||||
"required" : "optional");
|
"required" : "optional");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RARCH_LOG("Subsystems: %d\n", subsystem_size);
|
#endif
|
||||||
subsystem_size = size;
|
|
||||||
RARCH_LOG("Subsystems: %d\n", subsystem_size);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1461,7 +1469,6 @@ bool rarch_environment_cb(unsigned cmd, void *data)
|
||||||
cb, offsetof(struct retro_hw_render_callback, stencil));
|
cb, offsetof(struct retro_hw_render_callback, stencil));
|
||||||
memset(hwr + offsetof(struct retro_hw_render_callback, stencil),
|
memset(hwr + offsetof(struct retro_hw_render_callback, stencil),
|
||||||
0, sizeof(*cb) - offsetof(struct retro_hw_render_callback, stencil));
|
0, sizeof(*cb) - offsetof(struct retro_hw_render_callback, stencil));
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
memcpy(hwr, cb, sizeof(*cb));
|
memcpy(hwr, cb, sizeof(*cb));
|
||||||
|
|
11
dynamic.h
11
dynamic.h
|
@ -146,9 +146,14 @@ bool init_libretro_sym_custom(enum rarch_core_type type, struct retro_core_t *cu
|
||||||
**/
|
**/
|
||||||
void uninit_libretro_sym(struct retro_core_t *core);
|
void uninit_libretro_sym(struct retro_core_t *core);
|
||||||
|
|
||||||
struct retro_subsystem_info subsystem_data[20];
|
/* Arbitrary twenty subsystems limite */
|
||||||
struct retro_subsystem_rom_info subsystem_data_roms[10][10];
|
#define SUBSYSTEM_MAX_SUBSYSTEMS 20
|
||||||
unsigned subsystem_size;
|
/* Arbitrary 10 roms for each subsystem limit */
|
||||||
|
#define SUBSYSTEM_MAX_SUBSYSTEM_ROMS 10
|
||||||
|
|
||||||
|
struct retro_subsystem_info subsystem_data[SUBSYSTEM_MAX_SUBSYSTEMS];
|
||||||
|
struct retro_subsystem_rom_info subsystem_data_roms[SUBSYSTEM_MAX_SUBSYSTEMS][SUBSYSTEM_MAX_SUBSYSTEM_ROMS];
|
||||||
|
unsigned subsystem_current_count;
|
||||||
|
|
||||||
RETRO_END_DECLS
|
RETRO_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -521,14 +521,23 @@ static int action_bind_sublabel_subsystem_add(
|
||||||
char *s, size_t len)
|
char *s, size_t len)
|
||||||
{
|
{
|
||||||
rarch_system_info_t *system = runloop_get_system_info();
|
rarch_system_info_t *system = runloop_get_system_info();
|
||||||
const struct retro_subsystem_info *subsystem = (system && subsystem_size > 0) ?
|
const struct retro_subsystem_info *subsystem;
|
||||||
subsystem_data + (type - MENU_SETTINGS_SUBSYSTEM_ADD) : NULL;
|
|
||||||
|
|
||||||
if (subsystem_size > 0 && content_get_subsystem_rom_id() < subsystem->num_roms)
|
/* Core fully loaded, use the subsystem data */
|
||||||
snprintf(s, len, " Current Content: %s",
|
if (system->subsystem.data)
|
||||||
content_get_subsystem() == type - MENU_SETTINGS_SUBSYSTEM_ADD
|
subsystem = system->subsystem.data + (type - MENU_SETTINGS_SUBSYSTEM_ADD);
|
||||||
? subsystem->roms[content_get_subsystem_rom_id()].desc
|
/* Core not loaded completely, use the data we peeked on load core */
|
||||||
: subsystem->roms[0].desc);
|
else
|
||||||
|
subsystem = subsystem_data + (type - MENU_SETTINGS_SUBSYSTEM_ADD);
|
||||||
|
|
||||||
|
if (subsystem && subsystem_current_count > 0)
|
||||||
|
{
|
||||||
|
if (content_get_subsystem_rom_id() < subsystem->num_roms)
|
||||||
|
snprintf(s, len, " Current Content: %s",
|
||||||
|
content_get_subsystem() == type - MENU_SETTINGS_SUBSYSTEM_ADD
|
||||||
|
? subsystem->roms[content_get_subsystem_rom_id()].desc
|
||||||
|
: subsystem->roms[0].desc);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -502,6 +502,7 @@ static int ozone_list_push(void *data, void *userdata,
|
||||||
unsigned i = 0;
|
unsigned i = 0;
|
||||||
core_info_list_t *list = NULL;
|
core_info_list_t *list = NULL;
|
||||||
menu_handle_t *menu = (menu_handle_t*)data;
|
menu_handle_t *menu = (menu_handle_t*)data;
|
||||||
|
const struct retro_subsystem_info* subsystem;
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
@ -596,56 +597,14 @@ static int ozone_list_push(void *data, void *userdata,
|
||||||
entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST;
|
entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST;
|
||||||
menu_displaylist_setting(&entry);
|
menu_displaylist_setting(&entry);
|
||||||
|
|
||||||
if (subsystem_size > 0)
|
/* Core fully loaded, use the subsystem data */
|
||||||
{
|
if (system->subsystem.data)
|
||||||
const struct retro_subsystem_info* subsystem = subsystem_data;
|
subsystem = system->subsystem.data;
|
||||||
for (i = 0; i < subsystem_size; i++, subsystem++)
|
/* Core not loaded completely, use the data we peeked on load core */
|
||||||
{
|
else
|
||||||
char s[PATH_MAX_LENGTH];
|
subsystem = subsystem_data;
|
||||||
if (content_get_subsystem() == i)
|
|
||||||
{
|
menu_subsystem_populate(subsystem, info);
|
||||||
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_ADD_CONTENT_LIST;
|
entry.enum_idx = MENU_ENUM_LABEL_ADD_CONTENT_LIST;
|
||||||
|
|
|
@ -5453,6 +5453,7 @@ static int xmb_list_push(void *data, void *userdata,
|
||||||
unsigned i = 0;
|
unsigned i = 0;
|
||||||
core_info_list_t *list = NULL;
|
core_info_list_t *list = NULL;
|
||||||
menu_handle_t *menu = (menu_handle_t*)data;
|
menu_handle_t *menu = (menu_handle_t*)data;
|
||||||
|
const struct retro_subsystem_info* subsystem;
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
@ -5548,56 +5549,14 @@ static int xmb_list_push(void *data, void *userdata,
|
||||||
|
|
||||||
entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST;
|
entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST;
|
||||||
menu_displaylist_setting(&entry);
|
menu_displaylist_setting(&entry);
|
||||||
if (subsystem_size > 0)
|
/* Core fully loaded, use the subsystem data */
|
||||||
{
|
if (system->subsystem.data)
|
||||||
const struct retro_subsystem_info* subsystem = subsystem_data;
|
subsystem = system->subsystem.data;
|
||||||
for (i = 0; i < subsystem_size; i++, subsystem++)
|
/* Core not loaded completely, use the data we peeked on load core */
|
||||||
{
|
else
|
||||||
char s[PATH_MAX_LENGTH];
|
subsystem = subsystem_data;
|
||||||
if (content_get_subsystem() == i)
|
|
||||||
{
|
menu_subsystem_populate(subsystem, info);
|
||||||
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_ADD_CONTENT_LIST;
|
entry.enum_idx = MENU_ENUM_LABEL_ADD_CONTENT_LIST;
|
||||||
|
|
|
@ -2654,3 +2654,57 @@ void hex32_to_rgba_normalized(uint32_t hex, float* rgba, float alpha)
|
||||||
rgba[2] = rgba[6] = rgba[10] = rgba[14] = ((hex >> 0 ) & 0xFF) * (1.0f / 255.0f); /* b */
|
rgba[2] = rgba[6] = rgba[10] = rgba[14] = ((hex >> 0 ) & 0xFF) * (1.0f / 255.0f); /* b */
|
||||||
rgba[3] = rgba[7] = rgba[11] = rgba[15] = alpha;
|
rgba[3] = rgba[7] = rgba[11] = rgba[15] = alpha;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void menu_subsystem_populate(const struct retro_subsystem_info* subsystem, menu_displaylist_info_t *info)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
if (subsystem && subsystem_current_count > 0)
|
||||||
|
{
|
||||||
|
for (i = 0; i < subsystem_current_count; 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -844,6 +844,8 @@ void menu_driver_destroy(void);
|
||||||
|
|
||||||
void hex32_to_rgba_normalized(uint32_t hex, float* rgba, float alpha);
|
void hex32_to_rgba_normalized(uint32_t hex, float* rgba, float alpha);
|
||||||
|
|
||||||
|
void menu_subsystem_populate(const struct retro_subsystem_info* subsystem, menu_displaylist_info_t *info);
|
||||||
|
|
||||||
extern uintptr_t menu_display_white_texture;
|
extern uintptr_t menu_display_white_texture;
|
||||||
|
|
||||||
extern menu_display_ctx_driver_t menu_display_ctx_gl;
|
extern menu_display_ctx_driver_t menu_display_ctx_gl;
|
||||||
|
|
|
@ -74,6 +74,16 @@ void filebrowser_parse(menu_displaylist_info_t *info, unsigned type_data)
|
||||||
bool filter_ext =
|
bool filter_ext =
|
||||||
settings->bools.menu_navigation_browser_filter_supported_extensions_enable;
|
settings->bools.menu_navigation_browser_filter_supported_extensions_enable;
|
||||||
|
|
||||||
|
rarch_system_info_t *system = runloop_get_system_info();
|
||||||
|
const struct retro_subsystem_info *subsystem;
|
||||||
|
|
||||||
|
/* Core fully loaded, use the subsystem data */
|
||||||
|
if (system->subsystem.data)
|
||||||
|
subsystem = system->subsystem.data + content_get_subsystem();
|
||||||
|
/* Core not loaded completely, use the data we peeked on load core */
|
||||||
|
else
|
||||||
|
subsystem = subsystem_data + content_get_subsystem();
|
||||||
|
|
||||||
if (info && string_is_equal(info->label,
|
if (info && string_is_equal(info->label,
|
||||||
msg_hash_to_str(MENU_ENUM_LABEL_SCAN_FILE)))
|
msg_hash_to_str(MENU_ENUM_LABEL_SCAN_FILE)))
|
||||||
filter_ext = false;
|
filter_ext = false;
|
||||||
|
@ -82,21 +92,14 @@ void filebrowser_parse(menu_displaylist_info_t *info, unsigned type_data)
|
||||||
{
|
{
|
||||||
if (filebrowser_types != FILEBROWSER_SELECT_FILE_SUBSYSTEM)
|
if (filebrowser_types != FILEBROWSER_SELECT_FILE_SUBSYSTEM)
|
||||||
str_list = file_archive_get_file_list(path, info->exts);
|
str_list = file_archive_get_file_list(path, info->exts);
|
||||||
else
|
else if (subsystem && subsystem_current_count > 0)
|
||||||
{
|
str_list = file_archive_get_file_list(path, subsystem->roms[content_get_subsystem_rom_id()].valid_extensions);
|
||||||
const struct retro_subsystem_info *subsystem = &subsystem_data[content_get_subsystem()];
|
|
||||||
|
|
||||||
if (subsystem_size > 0)
|
|
||||||
str_list = file_archive_get_file_list(path, subsystem->roms[content_get_subsystem_rom_id()].valid_extensions);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (!string_is_empty(path))
|
else if (!string_is_empty(path))
|
||||||
{
|
{
|
||||||
if (filebrowser_types == FILEBROWSER_SELECT_FILE_SUBSYSTEM)
|
if (filebrowser_types == FILEBROWSER_SELECT_FILE_SUBSYSTEM)
|
||||||
{
|
{
|
||||||
const struct retro_subsystem_info *subsystem = &subsystem_data[content_get_subsystem()];
|
if (subsystem && subsystem_current_count > 0 && content_get_subsystem_rom_id() < subsystem->num_roms)
|
||||||
|
|
||||||
if (subsystem_size > 0 && content_get_subsystem_rom_id() < subsystem->num_roms)
|
|
||||||
str_list = dir_list_new(path,
|
str_list = dir_list_new(path,
|
||||||
(filter_ext && info) ? subsystem->roms[content_get_subsystem_rom_id()].valid_extensions : NULL,
|
(filter_ext && info) ? subsystem->roms[content_get_subsystem_rom_id()].valid_extensions : NULL,
|
||||||
true, settings->bools.show_hidden_files, true, false);
|
true, settings->bools.show_hidden_files, true, false);
|
||||||
|
|
|
@ -663,7 +663,7 @@ error:
|
||||||
static const struct
|
static const struct
|
||||||
retro_subsystem_info *content_file_init_subsystem(
|
retro_subsystem_info *content_file_init_subsystem(
|
||||||
const struct retro_subsystem_info *subsystem_data,
|
const struct retro_subsystem_info *subsystem_data,
|
||||||
size_t subsystem_size,
|
size_t subsystem_current_count,
|
||||||
char **error_string,
|
char **error_string,
|
||||||
bool *ret)
|
bool *ret)
|
||||||
{
|
{
|
||||||
|
@ -671,7 +671,7 @@ retro_subsystem_info *content_file_init_subsystem(
|
||||||
char *msg = (char*)malloc(path_size);
|
char *msg = (char*)malloc(path_size);
|
||||||
struct string_list *subsystem = path_get_subsystem_list();
|
struct string_list *subsystem = path_get_subsystem_list();
|
||||||
const struct retro_subsystem_info *special = libretro_find_subsystem_info(
|
const struct retro_subsystem_info *special = libretro_find_subsystem_info(
|
||||||
subsystem_data, subsystem_size,
|
subsystem_data, subsystem_current_count,
|
||||||
path_get(RARCH_PATH_SUBSYSTEM));
|
path_get(RARCH_PATH_SUBSYSTEM));
|
||||||
|
|
||||||
msg[0] = '\0';
|
msg[0] = '\0';
|
||||||
|
@ -1781,12 +1781,18 @@ int content_get_subsystem()
|
||||||
void content_set_subsystem(unsigned idx)
|
void content_set_subsystem(unsigned idx)
|
||||||
{
|
{
|
||||||
rarch_system_info_t *system = runloop_get_system_info();
|
rarch_system_info_t *system = runloop_get_system_info();
|
||||||
const struct retro_subsystem_info *subsystem = system ?
|
const struct retro_subsystem_info *subsystem;
|
||||||
subsystem_data + idx : NULL;
|
|
||||||
|
|
||||||
pending_subsystem_id = idx;
|
/* Core fully loaded, use the subsystem data */
|
||||||
|
if (system->subsystem.data)
|
||||||
|
subsystem = system->subsystem.data + idx;
|
||||||
|
/* Core not loaded completely, use the data we peeked on load core */
|
||||||
|
else
|
||||||
|
subsystem = subsystem_data + idx;
|
||||||
|
|
||||||
if (subsystem_size > 0)
|
pending_subsystem_id = idx;
|
||||||
|
|
||||||
|
if (subsystem && subsystem_current_count > 0)
|
||||||
{
|
{
|
||||||
strlcpy(pending_subsystem_ident,
|
strlcpy(pending_subsystem_ident,
|
||||||
subsystem->ident, sizeof(pending_subsystem_ident));
|
subsystem->ident, sizeof(pending_subsystem_ident));
|
||||||
|
|
Loading…
Reference in New Issue