From 20a187ef9cff6e8071b6832a8566c964a9da941a Mon Sep 17 00:00:00 2001 From: jdgleaver Date: Thu, 25 Feb 2021 16:59:05 +0000 Subject: [PATCH] Add option to reset all core options for current core/content --- intl/msg_hash_lbl.h | 4 ++++ intl/msg_hash_us.h | 14 +++++++++++++- menu/cbs/menu_cbs_ok.c | 10 ++++++++++ menu/cbs/menu_cbs_sublabel.c | 4 ++++ menu/drivers/materialui.c | 4 ++++ menu/drivers/ozone/ozone_texture.c | 2 ++ menu/drivers/xmb.c | 2 ++ menu/menu_displaylist.c | 16 +++++++++++++--- menu/menu_driver.h | 1 + msg_hash.h | 2 ++ retroarch.c | 26 ++++++++++++++++++++++++++ retroarch.h | 1 + 12 files changed, 82 insertions(+), 4 deletions(-) diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index ae600cd15e..751b9c91e6 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -1286,6 +1286,10 @@ MSG_HASH( MENU_ENUM_LABEL_CORE_OPTION_OVERRIDE_INFO, "core_option_override_info" ) +MSG_HASH( + MENU_ENUM_LABEL_CORE_OPTIONS_RESET, + "core_options_reset" + ) MSG_HASH( MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_CREATE, "game_specific_options_create" diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 051cd3d9fa..188d7ad5f2 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -6248,7 +6248,7 @@ MSG_HASH( "Save or remove option overrides for the current content." ) -/* Quick Menu > Options > Core Option Overrides */ +/* Quick Menu > Options > Manage Core Options */ MSG_HASH( MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_CORE_OPTIONS_CREATE, @@ -6270,6 +6270,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_OPTION_OVERRIDE_INFO, "Active Options File:" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CORE_OPTIONS_RESET, + "Reset Options" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CORE_OPTIONS_RESET, + "Set all core options to default values." + ) /* - Legacy (unused) */ MSG_HASH( @@ -10676,6 +10684,10 @@ MSG_HASH( MSG_CORE_OPTIONS_FILE_REMOVED_SUCCESSFULLY, "Core options file removed successfully." ) +MSG_HASH( + MSG_CORE_OPTIONS_RESET, + "All core options reset to default." + ) MSG_HASH( MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER, "Could not find any next driver" diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 9def5cc235..bd1793dd36 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -5082,6 +5082,13 @@ static int action_ok_folder_specific_core_options_remove(const char *path, return 0; } +static int action_ok_core_options_reset(const char *path, + const char *label, unsigned type, size_t idx, size_t entry_idx) +{ + core_options_reset(); + return 0; +} + int action_ok_close_content(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { int ret; @@ -8426,6 +8433,9 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs, case MENU_SETTING_ACTION_FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE: BIND_ACTION_OK(cbs, action_ok_folder_specific_core_options_remove); break; + case MENU_SETTING_ACTION_CORE_OPTIONS_RESET: + BIND_ACTION_OK(cbs, action_ok_core_options_reset); + break; case MENU_SETTING_ITEM_CORE_RESTORE_BACKUP: BIND_ACTION_OK(cbs, action_ok_core_restore_backup); break; diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 8a138a9489..c3fa206426 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -666,6 +666,7 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_shader_options, DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_input_remapping_options, MENU_ENUM_SUBLABEL_CORE_INPUT_REMAPPING_OPTIONS) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_options, MENU_ENUM_SUBLABEL_CORE_OPTIONS) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_option_override_list, MENU_ENUM_SUBLABEL_CORE_OPTION_OVERRIDE_LIST) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_options_reset, MENU_ENUM_SUBLABEL_CORE_OPTIONS_RESET) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_show_advanced_settings, MENU_ENUM_SUBLABEL_SHOW_ADVANCED_SETTINGS) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_threaded_data_runloop_enable, MENU_ENUM_SUBLABEL_THREADED_DATA_RUNLOOP_ENABLE) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_playlist_entry_rename, MENU_ENUM_SUBLABEL_PLAYLIST_ENTRY_RENAME) @@ -2490,6 +2491,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_CORE_OPTION_OVERRIDE_LIST: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_option_override_list); break; + case MENU_ENUM_LABEL_CORE_OPTIONS_RESET: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_options_reset); + break; case MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_input_remapping_options); break; diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index f22a4bff2a..c6398483a8 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -9797,6 +9797,10 @@ static void materialui_list_insert( node->icon_texture_index = MUI_TEXTURE_LOAD_STATE; node->icon_type = MUI_ICON_TYPE_INTERNAL; break; + case MENU_SETTING_ACTION_CORE_OPTIONS_RESET: + node->icon_texture_index = MUI_TEXTURE_UNDO_SAVE_STATE; + node->icon_type = MUI_ICON_TYPE_INTERNAL; + break; case FILE_TYPE_RPL_ENTRY: case MENU_SETTING_DROPDOWN_ITEM: case MENU_SETTING_DROPDOWN_ITEM_RESOLUTION: diff --git a/menu/drivers/ozone/ozone_texture.c b/menu/drivers/ozone/ozone_texture.c index 46bc564893..e12735da04 100644 --- a/menu/drivers/ozone/ozone_texture.c +++ b/menu/drivers/ozone/ozone_texture.c @@ -255,6 +255,8 @@ uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone, case MENU_ENUM_LABEL_GAME_SPECIFIC_CORE_OPTIONS_REMOVE: case MENU_ENUM_LABEL_FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE: return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CLOSE]; + case MENU_ENUM_LABEL_CORE_OPTIONS_RESET: + return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_UNDO]; case MENU_ENUM_LABEL_CORE_LOCK: return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CORE]; case MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS: diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 41b418e664..5b3192bb5b 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2700,6 +2700,8 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, case MENU_ENUM_LABEL_GAME_SPECIFIC_CORE_OPTIONS_REMOVE: case MENU_ENUM_LABEL_FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE: return xmb->textures.list[XMB_TEXTURE_CLOSE]; + case MENU_ENUM_LABEL_CORE_OPTIONS_RESET: + return xmb->textures.list[XMB_TEXTURE_UNDO]; case MENU_ENUM_LABEL_CORE_LOCK: return xmb->textures.list[XMB_TEXTURE_CORE]; case MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS: diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index caf9c3fa65..51535f80ba 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -904,6 +904,8 @@ static unsigned menu_displaylist_parse_core_option_override_list( menu_displaylist_info_t *info) { unsigned count = 0; + bool core_has_options = !rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL) && + rarch_ctl(RARCH_CTL_HAS_CORE_OPTIONS, NULL); bool game_options_active = rarch_ctl(RARCH_CTL_IS_GAME_OPTIONS_ACTIVE, NULL); bool folder_options_active = rarch_ctl(RARCH_CTL_IS_FOLDER_OPTIONS_ACTIVE, NULL); @@ -912,8 +914,7 @@ static unsigned menu_displaylist_parse_core_option_override_list( * - Core is 'dummy' * - Core has no options * - No content has been loaded */ - if (rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL) || - !rarch_ctl(RARCH_CTL_HAS_CORE_OPTIONS, NULL) || + if (!core_has_options || string_is_empty(path_get(RARCH_PATH_CONTENT))) goto end; @@ -961,8 +962,17 @@ static unsigned menu_displaylist_parse_core_option_override_list( MENU_SETTING_ACTION_FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE, 0, 0)) count++; end: + /* Reset core options */ + if (core_has_options) + if (menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS_RESET), + msg_hash_to_str(MENU_ENUM_LABEL_CORE_OPTIONS_RESET), + MENU_ENUM_LABEL_CORE_OPTIONS_RESET, + MENU_SETTING_ACTION_CORE_OPTIONS_RESET, 0, 0)) + count++; + /* Fallback, in case we open this menu while running - * a content-less core */ + * a core without options */ if (count == 0) if (menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_SETTINGS_FOUND), diff --git a/menu/menu_driver.h b/menu/menu_driver.h index c5ef3a3047..1b33e1df4b 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -237,6 +237,7 @@ enum menu_settings_type MENU_SETTING_ACTION_GAME_SPECIFIC_CORE_OPTIONS_REMOVE, MENU_SETTING_ACTION_FOLDER_SPECIFIC_CORE_OPTIONS_CREATE, MENU_SETTING_ACTION_FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE, + MENU_SETTING_ACTION_CORE_OPTIONS_RESET, MENU_SETTINGS_LAST }; diff --git a/msg_hash.h b/msg_hash.h index f94e01fa04..e095ef3436 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -356,6 +356,7 @@ enum msg_hash_enums MSG_ERROR_REMOVING_CORE_OPTIONS_FILE, MSG_CORE_OPTIONS_FILE_CREATED_SUCCESSFULLY, MSG_CORE_OPTIONS_FILE_REMOVED_SUCCESSFULLY, + MSG_CORE_OPTIONS_RESET, MSG_DECOMPRESSION_ALREADY_IN_PROGRESS, MSG_DECOMPRESSION_FAILED, MSG_DISK_EJECTED, @@ -1702,6 +1703,7 @@ enum msg_hash_enums MENU_LABEL(FOLDER_SPECIFIC_CORE_OPTIONS_CREATE), MENU_LABEL(FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE), MENU_LABEL(CORE_OPTION_OVERRIDE_INFO), + MENU_LABEL(CORE_OPTIONS_RESET), /* Legacy (unused) * > Cannot remove these because they are diff --git a/retroarch.c b/retroarch.c index 8cef845ffd..8a239c6c49 100644 --- a/retroarch.c +++ b/retroarch.c @@ -39012,6 +39012,32 @@ error: return false; } +void core_options_reset(void) +{ + struct rarch_state *p_rarch = &rarch_st; + core_option_manager_t *coreopts = p_rarch->runloop_core_options; + size_t i; + + /* If there are no core options, there + * is nothing to do */ + if (!coreopts || (coreopts->size < 1)) + return; + + for (i = 0; i < coreopts->size; i++) + coreopts->opts[i].index = coreopts->opts[i].default_index; + + coreopts->updated = true; + +#ifdef HAVE_CHEEVOS + rcheevos_validate_config_settings(); +#endif + + runloop_msg_queue_push( + msg_hash_to_str(MSG_CORE_OPTIONS_RESET), + 1, 100, true, + NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); +} + void menu_content_environment_get(int *argc, char *argv[], void *args, void *params_data) { diff --git a/retroarch.h b/retroarch.h index 02ed087df2..933694664b 100644 --- a/retroarch.h +++ b/retroarch.h @@ -1995,6 +1995,7 @@ void *input_driver_init_wrap(input_driver_t *input, const char *name); /* Creates folder and core options stub file for subsequent runs */ bool core_options_create_override(bool game_specific); bool core_options_remove_override(bool game_specific); +void core_options_reset(void); typedef enum apple_view_type {