diff --git a/file_list.c b/file_list.c index 89637bd915..d96ce01a47 100644 --- a/file_list.c +++ b/file_list.c @@ -159,19 +159,21 @@ void file_list_sort_on_alt(file_list_t *list) } void file_list_get_at_offset(const file_list_t *list, size_t index, - const char **path, unsigned *file_type) + const char **path, unsigned *file_type, rarch_setting_t *setting) { if (path) *path = list->list[index].path; if (file_type) *file_type = list->list[index].type; + if (setting) + setting = list->list[index].setting; } void file_list_get_last(const file_list_t *list, - const char **path, unsigned *file_type) + const char **path, unsigned *file_type, rarch_setting_t *setting) { if (list->size) - file_list_get_at_offset(list, list->size - 1, path, file_type); + file_list_get_at_offset(list, list->size - 1, path, file_type, setting); } bool file_list_search(const file_list_t *list, const char *needle, size_t *index) diff --git a/file_list.h b/file_list.h index 48bf5c571d..30552a73df 100644 --- a/file_list.h +++ b/file_list.h @@ -22,6 +22,7 @@ extern "C" { #endif #include "boolean.h" +#include "settings_data.h" struct item_file; typedef struct file_list @@ -40,13 +41,13 @@ void file_list_pop(file_list_t *list, size_t *directory_ptr); void file_list_clear(file_list_t *list); void file_list_get_last(const file_list_t *list, - const char **path, unsigned *type); + const char **path, unsigned *type, rarch_setting_t *setting); size_t file_list_get_size(const file_list_t *list); size_t file_list_get_directory_ptr(const file_list_t *list); void file_list_get_at_offset(const file_list_t *list, size_t index, - const char **path, unsigned *type); + const char **path, unsigned *type, rarch_setting_t *setting); void file_list_set_alt_at_offset(file_list_t *list, size_t index, const char *alt); diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index 59049a8d79..73653d13fe 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -1399,6 +1399,7 @@ static int menu_settings_iterate(unsigned action) const char *dir = NULL; unsigned type = 0; unsigned menu_type = 0; + rarch_setting_t *setting = NULL; if (!driver.menu) return 0; @@ -1406,7 +1407,7 @@ static int menu_settings_iterate(unsigned action) driver.menu->frame_buf_pitch = driver.menu->width * 2; if (action != MENU_ACTION_REFRESH) - file_list_get_at_offset(driver.menu->selection_buf, driver.menu->selection_ptr, &label, &type); + file_list_get_at_offset(driver.menu->selection_buf, driver.menu->selection_ptr, &label, &type, setting); if (type == MENU_SETTINGS_CORE) label = g_settings.libretro_directory; @@ -1415,7 +1416,7 @@ static int menu_settings_iterate(unsigned action) else if (type == MENU_SETTINGS_DISK_APPEND) label = g_settings.menu_content_directory; - file_list_get_last(driver.menu->menu_stack, &dir, &menu_type); + file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting); if (driver.menu->need_refresh) action = MENU_ACTION_NOOP; @@ -1446,7 +1447,7 @@ static int menu_settings_iterate(unsigned action) case MENU_ACTION_SELECT: { const char *path = NULL; - file_list_get_at_offset(driver.menu->selection_buf, driver.menu->selection_ptr, &path, &driver.menu->info_selection); + file_list_get_at_offset(driver.menu->selection_buf, driver.menu->selection_ptr, &path, &driver.menu->info_selection, setting); file_list_push(driver.menu->menu_stack, "", "", MENU_INFO_SCREEN, driver.menu->selection_ptr); } break; @@ -1508,7 +1509,7 @@ static int menu_settings_iterate(unsigned action) break; } - file_list_get_last(driver.menu->menu_stack, &dir, &menu_type); + file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting); if (driver.menu->need_refresh && !(menu_type == MENU_FILE_DIRECTORY || menu_common_type_is(menu_type) == MENU_SETTINGS_SHADER_OPTIONS || @@ -1567,16 +1568,17 @@ static int menu_settings_iterate(unsigned action) static int menu_viewport_iterate(unsigned action) { int stride_x, stride_y; - struct retro_game_geometry *geom; - const char *base_msg = NULL; char msg[64]; + struct retro_game_geometry *geom; + rarch_setting_t *setting = NULL; + const char *base_msg = NULL; unsigned menu_type = 0; rarch_viewport_t *custom = (rarch_viewport_t*)&g_extern.console.screen.viewports.custom_vp; if (!driver.menu) return 0; - file_list_get_last(driver.menu->menu_stack, NULL, &menu_type); + file_list_get_last(driver.menu->menu_stack, NULL, &menu_type, setting); geom = (struct retro_game_geometry*)&g_extern.system.av_info.geometry; stride_x = g_settings.video.scale_integer ? @@ -1695,7 +1697,7 @@ static int menu_viewport_iterate(unsigned action) break; } - file_list_get_last(driver.menu->menu_stack, NULL, &menu_type); + file_list_get_last(driver.menu->menu_stack, NULL, &menu_type, setting); if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render) driver.menu_ctx->render(); @@ -1745,7 +1747,8 @@ static int menu_viewport_iterate(unsigned action) static void menu_parse_and_resolve(unsigned menu_type) { size_t i, list_size; - file_list_t *list; + file_list_t *list = NULL; + rarch_setting_t *setting = NULL; const core_info_t *info = NULL; const char *dir = NULL; @@ -1791,7 +1794,7 @@ static void menu_parse_and_resolve(unsigned menu_type) default: { /* Directory parse */ - file_list_get_last(driver.menu->menu_stack, &dir, &menu_type); + file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting); if (!*dir) { @@ -1933,7 +1936,7 @@ static void menu_parse_and_resolve(unsigned menu_type) case MENU_SETTINGS_CORE: dir = NULL; list = (file_list_t*)driver.menu->selection_buf; - file_list_get_last(driver.menu->menu_stack, &dir, &menu_type); + file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting); list_size = file_list_get_size(list); for (i = 0; i < list_size; i++) { @@ -1941,7 +1944,7 @@ static void menu_parse_and_resolve(unsigned menu_type) const char *path = NULL; unsigned type = 0; - file_list_get_at_offset(list, i, &path, &type); + file_list_get_at_offset(list, i, &path, &type, setting); if (type != MENU_FILE_PLAIN) continue; @@ -2225,6 +2228,7 @@ static void menu_common_setting_set_current_string_dir(rarch_setting_t *setting, static int menu_common_iterate(unsigned action) { rarch_setting_t *setting_data, *current_setting; + rarch_setting_t *setting = NULL; int ret = 0; unsigned menu_type = 0; const char *dir = NULL; @@ -2237,7 +2241,7 @@ static int menu_common_iterate(unsigned action) setting_data = (rarch_setting_t *)setting_data_get_list(); - file_list_get_last(driver.menu->menu_stack, &dir, &menu_type); + file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting); if (driver.video_data && driver.menu_ctx && driver.menu_ctx->set_texture) driver.menu_ctx->set_texture(driver.menu); @@ -2330,7 +2334,7 @@ static int menu_common_iterate(unsigned action) if (file_list_get_size(driver.menu->selection_buf) == 0) return 0; - file_list_get_at_offset(driver.menu->selection_buf, driver.menu->selection_ptr, &path, &type); + file_list_get_at_offset(driver.menu->selection_buf, driver.menu->selection_ptr, &path, &type, setting); if ( menu_common_type_is(type) == MENU_SETTINGS_SHADER_OPTIONS || @@ -2627,9 +2631,8 @@ static int menu_common_iterate(unsigned action) break; } - // refresh values in case the stack changed - file_list_get_last(driver.menu->menu_stack, &dir, &menu_type); + file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting); if (driver.menu->need_refresh && (menu_type == MENU_FILE_DIRECTORY || menu_common_type_is(menu_type) == MENU_SETTINGS_SHADER_OPTIONS || diff --git a/frontend/menu/disp/rgui.c b/frontend/menu/disp/rgui.c index b410e154a3..152662cf71 100644 --- a/frontend/menu/disp/rgui.c +++ b/frontend/menu/disp/rgui.c @@ -264,6 +264,7 @@ static void rgui_render_messagebox(const char *message) static void rgui_render(void) { size_t begin, end; + rarch_setting_t *setting = NULL; if (driver.menu->need_refresh && (g_extern.lifecycle_state & (1ULL << MODE_MENU)) @@ -287,7 +288,7 @@ static void rgui_render(void) const char *dir = NULL; unsigned menu_type = 0; unsigned menu_type_is = 0; - file_list_get_last(driver.menu->menu_stack, &dir, &menu_type); + file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting); if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->type_is) menu_type_is = driver.menu_ctx->backend->type_is(menu_type); @@ -444,11 +445,11 @@ static void rgui_render(void) for (i = begin; i < end; i++, y += FONT_HEIGHT_STRIDE) { + char message[256], type_str[256]; const char *path = 0; unsigned type = 0; - file_list_get_at_offset(driver.menu->selection_buf, i, &path, &type); - char message[256]; - char type_str[256]; + rarch_setting_t *setting = NULL; + file_list_get_at_offset(driver.menu->selection_buf, i, &path, &type, setting); unsigned w = 19; if (menu_type == MENU_SETTINGS_PERFORMANCE_COUNTERS) diff --git a/frontend/menu/disp/rmenu.c b/frontend/menu/disp/rmenu.c index 3272d1c44c..81f26403b5 100644 --- a/frontend/menu/disp/rmenu.c +++ b/frontend/menu/disp/rmenu.c @@ -151,7 +151,8 @@ static void rmenu_render(void) const char *dir = NULL; unsigned menu_type = 0; unsigned menu_type_is = 0; - file_list_get_last(menu->menu_stack, &dir, &menu_type); + rarch_setting_t *setting = NULL; + file_list_get_last(menu->menu_stack, &dir, &menu_type, setting); if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->type_is) menu_type_is = driver.menu_ctx->backend->type_is(menu_type); @@ -321,7 +322,8 @@ static void rmenu_render(void) { const char *path = 0; unsigned type = 0; - file_list_get_at_offset(menu->selection_buf, i, &path, &type); + rarch_setting_t *setting = NULL; + file_list_get_at_offset(menu->selection_buf, i, &path, &type, setting); char message[256]; char type_str[256]; @@ -364,7 +366,7 @@ static void rmenu_render(void) if (type == MENU_FILE_PLAIN) { strlcpy(type_str, "(CORE)", sizeof(type_str)); - file_list_get_alt_at_offset(menu->selection_buf, i, &path); + file_list_get_alt_at_offset(menu->selection_buf, i, &path, setting); w = 6; } else diff --git a/frontend/menu/disp/rmenu_xui.cpp b/frontend/menu/disp/rmenu_xui.cpp index 1a37cba4a3..c9147f6ba7 100644 --- a/frontend/menu/disp/rmenu_xui.cpp +++ b/frontend/menu/disp/rmenu_xui.cpp @@ -379,6 +379,7 @@ static void rmenu_xui_render(void) const char *dir = NULL; unsigned menu_type = 0; unsigned menu_type_is = 0; + rarch_setting_t *setting = NULL; if (!driver.menu || driver.menu->need_refresh && (g_extern.lifecycle_state & (1ULL << MODE_MENU)) @@ -390,7 +391,7 @@ static void rmenu_xui_render(void) rmenu_xui_render_background(); - file_list_get_last(driver.menu->menu_stack, &dir, &menu_type); + file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting); if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->type_is) menu_type_is = driver.menu_ctx->backend->type_is(menu_type); @@ -547,7 +548,7 @@ static void rmenu_xui_render(void) { const char *path = 0; unsigned type = 0; - file_list_get_at_offset(driver.menu->selection_buf, i, &path, &type); + file_list_get_at_offset(driver.menu->selection_buf, i, &path, &type, setting); char message[256]; char type_str[256]; diff --git a/frontend/menu/menu_common.c b/frontend/menu/menu_common.c index 166d967c61..abfce6eb46 100644 --- a/frontend/menu/menu_common.c +++ b/frontend/menu/menu_common.c @@ -349,16 +349,17 @@ void menu_ticker_line(char *buf, size_t len, unsigned index, const char *str, bo void menu_flush_stack_type(unsigned final_type) { unsigned type = 0; + rarch_setting_t *setting = NULL; if (!driver.menu) return; driver.menu->need_refresh = true; - file_list_get_last(driver.menu->menu_stack, NULL, &type); + file_list_get_last(driver.menu->menu_stack, NULL, &type, setting); while (type != final_type) { file_list_pop(driver.menu->menu_stack, &driver.menu->selection_ptr); - file_list_get_last(driver.menu->menu_stack, NULL, &type); + file_list_get_last(driver.menu->menu_stack, NULL, &type, setting); } } @@ -370,6 +371,7 @@ bool menu_iterate(void) uint64_t input_state = 0; int32_t input_entry_ret = 0; int32_t ret = 0; + rarch_setting_t *setting = NULL; if (!driver.menu) return false; @@ -477,12 +479,12 @@ bool menu_iterate(void) if (ret < 0) { unsigned type = 0; - file_list_get_last(driver.menu->menu_stack, NULL, &type); + file_list_get_last(driver.menu->menu_stack, NULL, &type, setting); while (type != MENU_SETTINGS) { file_list_pop(driver.menu->menu_stack, &driver.menu->selection_ptr); - file_list_get_last(driver.menu->menu_stack, NULL, &type); + file_list_get_last(driver.menu->menu_stack, NULL, &type, setting); } } @@ -607,9 +609,10 @@ static inline int menu_list_get_first_char(file_list_t *buf, unsigned offset) static inline bool menu_list_elem_is_dir(file_list_t *buf, unsigned offset) { + rarch_setting_t *setting = NULL; const char *path = NULL; unsigned type = 0; - file_list_get_at_offset(buf, offset, &path, &type); + file_list_get_at_offset(buf, offset, &path, &type, setting); return type != MENU_FILE_PLAIN; } diff --git a/settings_data.h b/settings_data.h index 6471f516d5..cdb93302fe 100644 --- a/settings_data.h +++ b/settings_data.h @@ -16,7 +16,8 @@ #ifndef __RARCH_SETTINGS_DATA_H__ #define __RARCH_SETTINGS_DATA_H__ -#include "general.h" +#include +#include "conf/config_file.h" #define SETTINGS_DATA_LIST_SIZE 512