diff --git a/menu/cbs/menu_cbs_get_value.c b/menu/cbs/menu_cbs_get_value.c index 99e6f75f6e..8238c0b580 100644 --- a/menu/cbs/menu_cbs_get_value.c +++ b/menu/cbs/menu_cbs_get_value.c @@ -1902,7 +1902,7 @@ int menu_cbs_init_bind_get_string_representation(menu_file_list_cbs_t *cbs, if (cbs->setting) { - switch (cbs->setting->type) + switch (setting_get_type(cbs->setting)) { case ST_BOOL: BIND_ACTION_GET_VALUE(cbs, diff --git a/menu/cbs/menu_cbs_left.c b/menu/cbs/menu_cbs_left.c index be7d3835dc..826d9b1733 100644 --- a/menu/cbs/menu_cbs_left.c +++ b/menu/cbs/menu_cbs_left.c @@ -271,7 +271,7 @@ static int action_left_shader_filter_default(unsigned type, const char *label, if (!setting) return menu_cbs_exit(); return menu_action_handle_setting(setting, - setting->type, MENU_ACTION_LEFT, wraparound); + setting_get_type(setting), MENU_ACTION_LEFT, wraparound); #else return 0; #endif @@ -417,7 +417,7 @@ static int menu_cbs_init_bind_left_compare_label(menu_file_list_cbs_t *cbs, const char *parent_group = cbs->setting->parent_group; if (string_is_equal(parent_group, msg_hash_to_str(MENU_ENUM_LABEL_MAIN_MENU)) - && (cbs->setting->type == ST_GROUP)) + && (setting_get_type(cbs->setting) == ST_GROUP)) { BIND_ACTION_LEFT(cbs, action_left_mainmenu); return 0; diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 808153284d..701577a43a 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -1942,7 +1942,7 @@ static int action_ok_file_load(const char *path, setting = menu_setting_find(menu_label); - if (setting && setting->type == ST_PATH) + if (setting_get_type(setting) == ST_PATH) return action_ok_set_path(path, label, type, idx, entry_idx); strlcpy(menu_path_new, menu_path, sizeof(menu_path_new)); diff --git a/menu/cbs/menu_cbs_right.c b/menu/cbs/menu_cbs_right.c index bda29d7eb3..85a126e6c9 100644 --- a/menu/cbs/menu_cbs_right.c +++ b/menu/cbs/menu_cbs_right.c @@ -285,7 +285,8 @@ static int action_right_shader_filter_default(unsigned type, const char *label, rarch_setting_t *setting = menu_setting_find_enum(MENU_ENUM_LABEL_VIDEO_SMOOTH); if (!setting) return menu_cbs_exit(); - return menu_action_handle_setting(setting, setting->type, MENU_ACTION_RIGHT, + return menu_action_handle_setting(setting, + setting_get_type(setting), MENU_ACTION_RIGHT, wraparound); #else return 0; @@ -526,7 +527,7 @@ static int menu_cbs_init_bind_right_compare_label(menu_file_list_cbs_t *cbs, const char *parent_group = cbs->setting->parent_group; if (string_is_equal(parent_group, msg_hash_to_str(MENU_ENUM_LABEL_MAIN_MENU)) - && (cbs->setting->type == ST_GROUP)) + && (setting_get_type(cbs->setting) == ST_GROUP)) { BIND_ACTION_RIGHT(cbs, action_right_scroll); return 0; diff --git a/menu/cbs/menu_cbs_select.c b/menu/cbs/menu_cbs_select.c index c944aeb1e0..97a62dd642 100644 --- a/menu/cbs/menu_cbs_select.c +++ b/menu/cbs/menu_cbs_select.c @@ -61,7 +61,7 @@ static int action_select_default(const char *path, const char *label, unsigned t if (cbs->setting) { - switch (cbs->setting->type) + switch (setting_get_type(cbs->setting)) { case ST_BOOL: case ST_INT: diff --git a/menu/cbs/menu_cbs_title.c b/menu/cbs/menu_cbs_title.c index d16882e691..e83426263d 100644 --- a/menu/cbs/menu_cbs_title.c +++ b/menu/cbs/menu_cbs_title.c @@ -893,7 +893,7 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, const char *parent_group = cbs->setting->parent_group; if (string_is_equal(parent_group, msg_hash_to_str(MENU_ENUM_LABEL_MAIN_MENU)) - && cbs->setting->type == ST_GROUP) + && setting_get_type(cbs->setting) == ST_GROUP) { BIND_ACTION_GET_TITLE(cbs, action_get_title_group_settings); return 0; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index a0f0dc99c2..eca1c64571 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -2221,7 +2221,7 @@ static int menu_displaylist_parse_settings_internal(void *data, bool time_to_exit = false; const char *short_description = setting->short_description; const char *name = setting->name; - enum setting_type type = setting->type; + enum setting_type type = setting_get_type(setting); rarch_setting_t **list = &setting; switch (parse_type) @@ -2307,7 +2307,7 @@ loop: case PARSE_GROUP: case PARSE_ONLY_GROUP: case PARSE_SUB_GROUP: - if (setting->type == precond) + if (setting_get_type(setting) == precond) time_to_exit = true; break; case PARSE_ONLY_BIND: @@ -2408,7 +2408,7 @@ static int menu_displaylist_parse_settings_internal_enum(void *data, bool time_to_exit = false; const char *short_description = setting->short_description; const char *name = setting->name; - enum setting_type type = setting->type; + enum setting_type type = setting_get_type(setting); rarch_setting_t **list = &setting; switch (parse_type) @@ -2494,7 +2494,7 @@ loop: case PARSE_GROUP: case PARSE_ONLY_GROUP: case PARSE_SUB_GROUP: - if (setting->type == precond) + if (setting_get_type(setting) == precond) time_to_exit = true; break; case PARSE_ONLY_BIND: diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 9447175451..6c60fda1b1 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -640,7 +640,7 @@ int menu_action_handle_setting(rarch_setting_t *setting, if (!setting) return -1; - switch (setting->type) + switch (setting_get_type(setting)) { case ST_PATH: if (action == MENU_ACTION_OK) @@ -690,9 +690,10 @@ static rarch_setting_t *menu_setting_find_internal(rarch_setting_t *setting, uint32_t needle = msg_hash_calculate(label); rarch_setting_t **list = &setting; - for (; setting->type != ST_NONE; (*list = *list + 1)) + for (; setting_get_type(setting) != ST_NONE; (*list = *list + 1)) { - if (needle == setting->name_hash && setting->type <= ST_GROUP) + if ( (needle == setting->name_hash) + && (setting_get_type(setting) <= ST_GROUP)) { const char *name = setting->name; const char *short_description = setting->short_description; @@ -717,9 +718,9 @@ static rarch_setting_t *menu_setting_find_internal_enum(rarch_setting_t *setting enum msg_hash_enums enum_idx) { rarch_setting_t **list = &setting; - for (; setting->type != ST_NONE; (*list = *list + 1)) + for (; setting_get_type(setting) != ST_NONE; (*list = *list + 1)) { - if (setting->enum_idx == enum_idx && setting->type <= ST_GROUP) + if (setting->enum_idx == enum_idx && setting_get_type(setting) <= ST_GROUP) { const char *short_description = setting->short_description; if (string_is_empty(short_description)) @@ -773,7 +774,7 @@ int menu_setting_set_flags(rarch_setting_t *setting) if (!setting) return 0; - switch (setting->type) + switch (setting_get_type(setting)) { case ST_STRING_OPTIONS: return MENU_SETTING_STRING_OPTIONS; @@ -821,7 +822,7 @@ void *setting_get_ptr(rarch_setting_t *setting) if (!setting) return NULL; - switch (setting->type) + switch (setting_get_type(setting)) { case ST_BOOL: return setting->value.target.boolean; @@ -6308,7 +6309,7 @@ bool menu_setting_free(void *data) return false; /* Free data which was previously tagged */ - for (; setting->type != ST_NONE; (*list = *list + 1)) + for (; setting_get_type(setting) != ST_NONE; (*list = *list + 1)) for (values = setting->free_flags, n = 0; values != 0; values >>= 1, n++) if (values & 1) switch (1 << n) @@ -6450,7 +6451,7 @@ bool menu_setting_ctl(enum menu_setting_ctl_state state, void *data) flags = setting->flags; - if (setting->type != ST_ACTION) + if (setting_get_type(setting) != ST_ACTION) return false; if (!setting->change_handler) diff --git a/menu/widgets/menu_entry.c b/menu/widgets/menu_entry.c index e327a244d8..1fe68b8f01 100644 --- a/menu/widgets/menu_entry.c +++ b/menu/widgets/menu_entry.c @@ -45,7 +45,7 @@ enum menu_entry_type menu_entry_get_type(uint32_t i) if (setting) { - switch (setting->type) + switch (setting_get_type(setting)) { case ST_BOOL: return MENU_ENTRY_BOOL; diff --git a/setting_list.c b/setting_list.c index 94b7b50776..9949da39c1 100644 --- a/setting_list.c +++ b/setting_list.c @@ -103,6 +103,13 @@ bool settings_list_append(rarch_setting_t **list, return true; } +enum setting_type setting_get_type(rarch_setting_t *setting) +{ + if (!setting) + return ST_NONE; + return setting->type; +} + unsigned setting_get_bind_type(rarch_setting_t *setting) { if (!setting) @@ -309,7 +316,7 @@ int setting_set_with_string_representation(rarch_setting_t* setting, max = setting->max; flags = setting->flags; - switch (setting->type) + switch (setting_get_type(setting)) { case ST_INT: sscanf(value, "%d", setting->value.target.integer); @@ -463,7 +470,7 @@ static void setting_reset_setting(rarch_setting_t* setting) if (!setting) return; - switch (setting->type) + switch (setting_get_type(setting)) { case ST_BOOL: *setting->value.target.boolean = setting->default_value.boolean; @@ -486,7 +493,7 @@ static void setting_reset_setting(rarch_setting_t* setting) case ST_DIR: if (setting->default_value.string) { - if (setting->type == ST_STRING) + if (setting_get_type(setting) == ST_STRING) setting_set_with_string_representation(setting, setting->default_value.string); else fill_pathname_expand_special(setting->value.target.string, @@ -2020,7 +2027,7 @@ static int setting_generic_action_ok_linefeed(void *data, bool wraparound) (void)wraparound; - switch (setting->type) + switch (setting_get_type(setting)) { case ST_UINT: cb = menu_input_st_uint_cb; diff --git a/setting_list.h b/setting_list.h index 0f41fdceed..6ec91a4aad 100644 --- a/setting_list.h +++ b/setting_list.h @@ -414,6 +414,8 @@ void settings_data_list_current_add_free_flags( rarch_setting_info_t *list_info, unsigned values); +enum setting_type setting_get_type(rarch_setting_t *setting); + rarch_setting_t setting_terminator_setting(void); RETRO_END_DECLS