mirror of
https://github.com/libretro/RetroArch
synced 2025-02-01 00:32:46 +00:00
Merge pull request #12877 from jdgleaver/core-options-flush
Add option to (force-)write current core options to disk
This commit is contained in:
commit
00b15c4e79
@ -596,6 +596,9 @@ static const bool quick_menu_show_start_streaming = true;
|
||||
static const bool quick_menu_show_set_core_association = true;
|
||||
static const bool quick_menu_show_reset_core_association = true;
|
||||
static const bool quick_menu_show_options = true;
|
||||
|
||||
#define DEFAULT_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH false
|
||||
|
||||
static const bool quick_menu_show_controls = true;
|
||||
static const bool quick_menu_show_cheats = true;
|
||||
static const bool quick_menu_show_shaders = true;
|
||||
|
@ -1683,6 +1683,7 @@ static struct config_bool_setting *populate_settings_bool(
|
||||
SETTING_BOOL("quick_menu_show_set_core_association", &settings->bools.quick_menu_show_set_core_association, true, quick_menu_show_set_core_association, false);
|
||||
SETTING_BOOL("quick_menu_show_reset_core_association", &settings->bools.quick_menu_show_reset_core_association, true, quick_menu_show_reset_core_association, false);
|
||||
SETTING_BOOL("quick_menu_show_options", &settings->bools.quick_menu_show_options, true, quick_menu_show_options, false);
|
||||
SETTING_BOOL("quick_menu_show_core_options_flush", &settings->bools.quick_menu_show_core_options_flush, true, DEFAULT_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH, false);
|
||||
SETTING_BOOL("quick_menu_show_controls", &settings->bools.quick_menu_show_controls, true, quick_menu_show_controls, false);
|
||||
SETTING_BOOL("quick_menu_show_cheats", &settings->bools.quick_menu_show_cheats, true, quick_menu_show_cheats, false);
|
||||
SETTING_BOOL("quick_menu_show_shaders", &settings->bools.quick_menu_show_shaders, true, quick_menu_show_shaders, false);
|
||||
|
@ -693,6 +693,7 @@ typedef struct settings
|
||||
bool quick_menu_show_set_core_association;
|
||||
bool quick_menu_show_reset_core_association;
|
||||
bool quick_menu_show_options;
|
||||
bool quick_menu_show_core_options_flush;
|
||||
bool quick_menu_show_controls;
|
||||
bool quick_menu_show_cheats;
|
||||
bool quick_menu_show_shaders;
|
||||
|
@ -1322,6 +1322,10 @@ MSG_HASH(
|
||||
MENU_ENUM_LABEL_CORE_OPTIONS_RESET,
|
||||
"core_options_reset"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_CORE_OPTIONS_FLUSH,
|
||||
"core_options_flush"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_CREATE,
|
||||
"game_specific_options_create"
|
||||
@ -4070,6 +4074,10 @@ MSG_HASH(
|
||||
MENU_ENUM_LABEL_QUICK_MENU_SHOW_OPTIONS,
|
||||
"quick_menu_show_options"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH,
|
||||
"quick_menu_show_core_options_flush"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_QUICK_MENU_SHOW_CONTROLS,
|
||||
"quick_menu_show_controls"
|
||||
|
@ -4569,6 +4569,14 @@ MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_OPTIONS,
|
||||
"Show the 'Options' option."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH,
|
||||
"Show 'Flush Options to Disk'"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH,
|
||||
"Show the 'Flush Options to Disk' entry in the 'Options > Manage Core Options' menu."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_QUICK_MENU_SHOW_CONTROLS,
|
||||
"Show 'Controls'"
|
||||
@ -6494,6 +6502,14 @@ MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CORE_OPTIONS_RESET,
|
||||
"Set all core options to default values."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CORE_OPTIONS_FLUSH,
|
||||
"Flush Options to Disk"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CORE_OPTIONS_FLUSH,
|
||||
"Force current settings to be written to active options file. Ensures options are preserved in the event that a core bug causes improper shutdown of the frontend."
|
||||
)
|
||||
|
||||
/* - Legacy (unused) */
|
||||
MSG_HASH(
|
||||
@ -10952,6 +10968,14 @@ MSG_HASH(
|
||||
MSG_CORE_OPTIONS_RESET,
|
||||
"All core options reset to default."
|
||||
)
|
||||
MSG_HASH(
|
||||
MSG_CORE_OPTIONS_FLUSHED,
|
||||
"Core options saved to:"
|
||||
)
|
||||
MSG_HASH(
|
||||
MSG_CORE_OPTIONS_FLUSH_FAILED,
|
||||
"Failed to save core options to:"
|
||||
)
|
||||
MSG_HASH(
|
||||
MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER,
|
||||
"Could not find any next driver"
|
||||
|
@ -5084,6 +5084,13 @@ static int action_ok_core_options_reset(const char *path,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int action_ok_core_options_flush(const char *path,
|
||||
const char *label, unsigned type, size_t idx, size_t entry_idx)
|
||||
{
|
||||
core_options_flush();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int action_ok_close_content(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx)
|
||||
{
|
||||
int ret;
|
||||
@ -8437,6 +8444,9 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
|
||||
case MENU_SETTING_ACTION_CORE_OPTIONS_RESET:
|
||||
BIND_ACTION_OK(cbs, action_ok_core_options_reset);
|
||||
break;
|
||||
case MENU_SETTING_ACTION_CORE_OPTIONS_FLUSH:
|
||||
BIND_ACTION_OK(cbs, action_ok_core_options_flush);
|
||||
break;
|
||||
case MENU_SETTING_ITEM_CORE_RESTORE_BACKUP:
|
||||
BIND_ACTION_OK(cbs, action_ok_core_restore_backup);
|
||||
break;
|
||||
|
@ -688,6 +688,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_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_core_options_flush, MENU_ENUM_SUBLABEL_CORE_OPTIONS_FLUSH)
|
||||
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)
|
||||
@ -770,6 +771,7 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_start_streaming,
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_set_core_association, MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_SET_CORE_ASSOCIATION)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_reset_core_association,MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_RESET_CORE_ASSOCIATION)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_options, MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_OPTIONS)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_core_options_flush, MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_controls, MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_CONTROLS)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_shaders, MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_SHADERS)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_content_show_overlays, MENU_ENUM_SUBLABEL_CONTENT_SHOW_OVERLAYS)
|
||||
@ -2364,6 +2366,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
||||
case MENU_ENUM_LABEL_QUICK_MENU_SHOW_OPTIONS:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_quick_menu_show_options);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_quick_menu_show_core_options_flush);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_QUICK_MENU_SHOW_CONTROLS:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_quick_menu_show_controls);
|
||||
break;
|
||||
@ -2666,6 +2671,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
||||
case MENU_ENUM_LABEL_CORE_OPTIONS_RESET:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_options_reset);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_CORE_OPTIONS_FLUSH:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_options_flush);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_input_remapping_options);
|
||||
break;
|
||||
|
@ -10068,6 +10068,10 @@ static void materialui_list_insert(
|
||||
node->icon_texture_index = MUI_TEXTURE_UNDO_SAVE_STATE;
|
||||
node->icon_type = MUI_ICON_TYPE_INTERNAL;
|
||||
break;
|
||||
case MENU_SETTING_ACTION_CORE_OPTIONS_FLUSH:
|
||||
node->icon_texture_index = MUI_TEXTURE_FILE;
|
||||
node->icon_type = MUI_ICON_TYPE_INTERNAL;
|
||||
break;
|
||||
case FILE_TYPE_RPL_ENTRY:
|
||||
case MENU_SETTING_DROPDOWN_ITEM:
|
||||
case MENU_SETTING_DROPDOWN_ITEM_RESOLUTION:
|
||||
|
@ -259,6 +259,8 @@ uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
|
||||
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_OPTIONS_FLUSH:
|
||||
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_FILE];
|
||||
case MENU_ENUM_LABEL_CORE_LOCK:
|
||||
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CORE];
|
||||
case MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS:
|
||||
|
@ -2778,6 +2778,8 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
|
||||
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_OPTIONS_FLUSH:
|
||||
return xmb->textures.list[XMB_TEXTURE_FILE];
|
||||
case MENU_ENUM_LABEL_CORE_LOCK:
|
||||
return xmb->textures.list[XMB_TEXTURE_CORE];
|
||||
case MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS:
|
||||
|
@ -1026,13 +1026,15 @@ end:
|
||||
}
|
||||
|
||||
static unsigned menu_displaylist_parse_core_option_override_list(
|
||||
menu_displaylist_info_t *info)
|
||||
menu_displaylist_info_t *info, settings_t *settings)
|
||||
{
|
||||
unsigned count = 0;
|
||||
bool core_has_options = !rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL) &&
|
||||
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);
|
||||
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);
|
||||
bool show_core_options_flush = settings ?
|
||||
settings->bools.quick_menu_show_core_options_flush : false;
|
||||
|
||||
/* Sanity check - cannot handle core option
|
||||
* overrides if:
|
||||
@ -1087,14 +1089,25 @@ 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)
|
||||
{
|
||||
/* Flush core options to disk */
|
||||
if (show_core_options_flush)
|
||||
if (menu_entries_append_enum(info->list,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS_FLUSH),
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_CORE_OPTIONS_FLUSH),
|
||||
MENU_ENUM_LABEL_CORE_OPTIONS_FLUSH,
|
||||
MENU_SETTING_ACTION_CORE_OPTIONS_FLUSH, 0, 0))
|
||||
count++;
|
||||
|
||||
/* Reset core 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 core without options */
|
||||
@ -8896,6 +8909,7 @@ unsigned menu_displaylist_build_list(
|
||||
{MENU_ENUM_LABEL_QUICK_MENU_SHOW_SET_CORE_ASSOCIATION, PARSE_ONLY_BOOL},
|
||||
{MENU_ENUM_LABEL_QUICK_MENU_SHOW_RESET_CORE_ASSOCIATION, PARSE_ONLY_BOOL},
|
||||
{MENU_ENUM_LABEL_QUICK_MENU_SHOW_OPTIONS, PARSE_ONLY_BOOL},
|
||||
{MENU_ENUM_LABEL_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH, PARSE_ONLY_BOOL},
|
||||
{MENU_ENUM_LABEL_QUICK_MENU_SHOW_CONTROLS, PARSE_ONLY_BOOL},
|
||||
{MENU_ENUM_LABEL_QUICK_MENU_SHOW_CHEATS, PARSE_ONLY_BOOL},
|
||||
};
|
||||
@ -11464,7 +11478,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
|
||||
size_t selection = menu_navigation_get_selection();
|
||||
|
||||
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
|
||||
count = menu_displaylist_parse_core_option_override_list(info);
|
||||
count = menu_displaylist_parse_core_option_override_list(info, settings);
|
||||
|
||||
if (selection >= count)
|
||||
{
|
||||
|
@ -244,6 +244,7 @@ enum menu_settings_type
|
||||
MENU_SETTING_ACTION_FOLDER_SPECIFIC_CORE_OPTIONS_CREATE,
|
||||
MENU_SETTING_ACTION_FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE,
|
||||
MENU_SETTING_ACTION_CORE_OPTIONS_RESET,
|
||||
MENU_SETTING_ACTION_CORE_OPTIONS_FLUSH,
|
||||
|
||||
MENU_SETTINGS_LAST
|
||||
};
|
||||
|
@ -17734,6 +17734,21 @@ static bool setting_append_list(
|
||||
general_read_handler,
|
||||
SD_FLAG_NONE);
|
||||
|
||||
CONFIG_BOOL(
|
||||
list, list_info,
|
||||
&settings->bools.quick_menu_show_core_options_flush,
|
||||
MENU_ENUM_LABEL_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH,
|
||||
MENU_ENUM_LABEL_VALUE_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH,
|
||||
DEFAULT_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH,
|
||||
MENU_ENUM_LABEL_VALUE_OFF,
|
||||
MENU_ENUM_LABEL_VALUE_ON,
|
||||
&group_info,
|
||||
&subgroup_info,
|
||||
parent_group,
|
||||
general_write_handler,
|
||||
general_read_handler,
|
||||
SD_FLAG_NONE);
|
||||
|
||||
CONFIG_BOOL(
|
||||
list, list_info,
|
||||
&settings->bools.quick_menu_show_controls,
|
||||
|
@ -358,6 +358,8 @@ enum msg_hash_enums
|
||||
MSG_CORE_OPTIONS_FILE_CREATED_SUCCESSFULLY,
|
||||
MSG_CORE_OPTIONS_FILE_REMOVED_SUCCESSFULLY,
|
||||
MSG_CORE_OPTIONS_RESET,
|
||||
MSG_CORE_OPTIONS_FLUSHED,
|
||||
MSG_CORE_OPTIONS_FLUSH_FAILED,
|
||||
MSG_DECOMPRESSION_ALREADY_IN_PROGRESS,
|
||||
MSG_DECOMPRESSION_FAILED,
|
||||
MSG_DISK_EJECTED,
|
||||
@ -1249,6 +1251,7 @@ enum msg_hash_enums
|
||||
MENU_LABEL(QUICK_MENU_SHOW_SET_CORE_ASSOCIATION),
|
||||
MENU_LABEL(QUICK_MENU_SHOW_RESET_CORE_ASSOCIATION),
|
||||
MENU_LABEL(QUICK_MENU_SHOW_OPTIONS),
|
||||
MENU_LABEL(QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH),
|
||||
MENU_LABEL(QUICK_MENU_SHOW_CONTROLS),
|
||||
MENU_LABEL(QUICK_MENU_SHOW_CHEATS),
|
||||
MENU_LABEL(QUICK_MENU_SHOW_SHADERS),
|
||||
@ -1753,6 +1756,7 @@ enum msg_hash_enums
|
||||
MENU_LABEL(FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE),
|
||||
MENU_LABEL(CORE_OPTION_OVERRIDE_INFO),
|
||||
MENU_LABEL(CORE_OPTIONS_RESET),
|
||||
MENU_LABEL(CORE_OPTIONS_FLUSH),
|
||||
|
||||
/* Legacy (unused)
|
||||
* > Cannot remove these because they are
|
||||
|
101
retroarch.c
101
retroarch.c
@ -39611,7 +39611,6 @@ bool core_options_remove_override(bool game_specific)
|
||||
}
|
||||
|
||||
coreopts->updated = true;
|
||||
config_file_free(conf);
|
||||
|
||||
#ifdef HAVE_CHEEVOS
|
||||
rcheevos_validate_config_settings();
|
||||
@ -39631,8 +39630,17 @@ bool core_options_remove_override(bool game_specific)
|
||||
runloop_state.game_options_active = false;
|
||||
runloop_state.folder_options_active = false;
|
||||
|
||||
/* Update config file path/object stored in
|
||||
* core option manager struct */
|
||||
strlcpy(coreopts->conf_path, new_options_path,
|
||||
sizeof(coreopts->conf_path));
|
||||
|
||||
if (conf)
|
||||
{
|
||||
config_file_free(coreopts->conf);
|
||||
coreopts->conf = conf;
|
||||
conf = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
runloop_msg_queue_push(
|
||||
@ -39640,6 +39648,9 @@ bool core_options_remove_override(bool game_specific)
|
||||
1, 100, true,
|
||||
NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
|
||||
|
||||
if (conf)
|
||||
config_file_free(conf);
|
||||
|
||||
return true;
|
||||
|
||||
error:
|
||||
@ -39679,6 +39690,94 @@ void core_options_reset(void)
|
||||
NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
|
||||
}
|
||||
|
||||
void core_options_flush(void)
|
||||
{
|
||||
core_option_manager_t *coreopts = runloop_state.core_options;
|
||||
const char *path_core_options = path_get(RARCH_PATH_CORE_OPTIONS);
|
||||
const char *core_options_file = NULL;
|
||||
bool success = false;
|
||||
char msg[256];
|
||||
|
||||
msg[0] = '\0';
|
||||
|
||||
/* If there are no core options, there
|
||||
* is nothing to do */
|
||||
if (!coreopts || (coreopts->size < 1))
|
||||
return;
|
||||
|
||||
/* Check whether game/folder-specific options file
|
||||
* is being used */
|
||||
if (!string_is_empty(path_core_options))
|
||||
{
|
||||
config_file_t *conf_tmp = NULL;
|
||||
|
||||
/* Attempt to load existing file */
|
||||
if (path_is_valid(path_core_options))
|
||||
conf_tmp = config_file_new_from_path_to_string(path_core_options);
|
||||
|
||||
/* Create new file if required */
|
||||
if (!conf_tmp)
|
||||
conf_tmp = config_file_new_alloc();
|
||||
|
||||
if (conf_tmp)
|
||||
{
|
||||
core_option_manager_flush(
|
||||
runloop_state.core_options,
|
||||
conf_tmp);
|
||||
|
||||
success = config_file_write(conf_tmp, path_core_options, true);
|
||||
config_file_free(conf_tmp);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We are using the 'default' core options file */
|
||||
path_core_options = runloop_state.core_options->conf_path;
|
||||
|
||||
if (!string_is_empty(path_core_options))
|
||||
{
|
||||
core_option_manager_flush(
|
||||
runloop_state.core_options,
|
||||
runloop_state.core_options->conf);
|
||||
|
||||
/* We must *guarantee* that a file gets written
|
||||
* to disk if any options differ from the current
|
||||
* options file contents. Must therefore handle
|
||||
* the case where the 'default' file does not
|
||||
* exist (e.g. if it gets deleted manually while
|
||||
* a core is running) */
|
||||
if (!path_is_valid(path_core_options))
|
||||
runloop_state.core_options->conf->modified = true;
|
||||
|
||||
success = config_file_write(runloop_state.core_options->conf,
|
||||
path_core_options, true);
|
||||
}
|
||||
}
|
||||
|
||||
/* Get options file name for display purposes */
|
||||
if (!string_is_empty(path_core_options))
|
||||
core_options_file = path_basename(path_core_options);
|
||||
|
||||
if (string_is_empty(core_options_file))
|
||||
core_options_file = msg_hash_to_str(MENU_ENUM_LABEL_VALUE_UNKNOWN);
|
||||
|
||||
/* Log result */
|
||||
RARCH_LOG(success ?
|
||||
"[Core Options]: Saved core options to \"%s\"\n" :
|
||||
"[Core Options]: Failed to save core options to \"%s\"\n",
|
||||
path_core_options ? path_core_options : "UNKNOWN");
|
||||
|
||||
snprintf(msg, sizeof(msg), "%s \"%s\"",
|
||||
success ?
|
||||
msg_hash_to_str(MSG_CORE_OPTIONS_FLUSHED) :
|
||||
msg_hash_to_str(MSG_CORE_OPTIONS_FLUSH_FAILED),
|
||||
core_options_file);
|
||||
|
||||
runloop_msg_queue_push(
|
||||
msg, 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)
|
||||
{
|
||||
|
@ -2079,6 +2079,7 @@ static const unsigned input_config_bind_order[] = {
|
||||
bool core_options_create_override(bool game_specific);
|
||||
bool core_options_remove_override(bool game_specific);
|
||||
void core_options_reset(void);
|
||||
void core_options_flush(void);
|
||||
|
||||
typedef enum apple_view_type
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user