Skip to content

Commit 5dfd2d8

Browse files
committed
Add 'save as' and main config replacing options
1 parent 9d09ec3 commit 5dfd2d8

File tree

11 files changed

+139
-2
lines changed

11 files changed

+139
-2
lines changed

command.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@ enum event_command
168168
/* Configuration saving. */
169169
CMD_EVENT_MENU_RESET_TO_DEFAULT_CONFIG,
170170
CMD_EVENT_MENU_SAVE_CONFIG,
171+
CMD_EVENT_MENU_SAVE_AS_CONFIG,
172+
CMD_EVENT_MENU_SAVE_MAIN_CONFIG,
171173
CMD_EVENT_MENU_SAVE_CURRENT_CONFIG,
172174
CMD_EVENT_MENU_SAVE_CURRENT_CONFIG_OVERRIDE_CORE,
173175
CMD_EVENT_MENU_SAVE_CURRENT_CONFIG_OVERRIDE_CONTENT_DIR,

configuration.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4000,7 +4000,8 @@ static bool config_load_file(global_t *global,
40004000
settings->arrays.midi_output,
40014001
DEFAULT_MIDI_OUTPUT);
40024002

4003-
path_config = path_get(RARCH_PATH_CONFIG);
4003+
/* History playlists must stay in default config path */
4004+
path_config = g_defaults.path_config;
40044005

40054006
if (string_is_empty(settings->paths.path_content_favorites))
40064007
strlcpy(settings->paths.directory_content_favorites, "default",

intl/msg_hash_lbl.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3636,6 +3636,14 @@ MSG_HASH(
36363636
MENU_ENUM_LABEL_SAVE_NEW_CONFIG,
36373637
"save_new_config"
36383638
)
3639+
MSG_HASH(
3640+
MENU_ENUM_LABEL_SAVE_AS_CONFIG,
3641+
"save_as_config"
3642+
)
3643+
MSG_HASH(
3644+
MENU_ENUM_LABEL_SAVE_MAIN_CONFIG,
3645+
"save_main_config"
3646+
)
36393647
MSG_HASH(
36403648
MENU_ENUM_LABEL_SAVE_STATE,
36413649
"save_state"

intl/msg_hash_us.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1151,6 +1151,22 @@ MSG_HASH(
11511151
MENU_ENUM_SUBLABEL_SAVE_NEW_CONFIG,
11521152
"Save current configuration to separate file."
11531153
)
1154+
MSG_HASH(
1155+
MENU_ENUM_LABEL_VALUE_SAVE_AS_CONFIG,
1156+
"Save Configuration As"
1157+
)
1158+
MSG_HASH(
1159+
MENU_ENUM_SUBLABEL_SAVE_AS_CONFIG,
1160+
"Save current configuration as custom configuration file."
1161+
)
1162+
MSG_HASH(
1163+
MENU_ENUM_LABEL_VALUE_SAVE_MAIN_CONFIG,
1164+
"Save Main Configuration"
1165+
)
1166+
MSG_HASH(
1167+
MENU_ENUM_SUBLABEL_SAVE_MAIN_CONFIG,
1168+
"Save current configuration as main configuration."
1169+
)
11541170
MSG_HASH(
11551171
MENU_ENUM_LABEL_VALUE_RESET_TO_DEFAULT_CONFIG,
11561172
"Reset to Defaults"
@@ -14995,7 +15011,7 @@ MSG_HASH(
1499515011
)
1499615012
MSG_HASH(
1499715013
MSG_SAVED_NEW_CONFIG_TO,
14998-
"Saved new config to"
15014+
"Saved config to"
1499915015
)
1500015016
MSG_HASH(
1500115017
MSG_SAVED_STATE_TO_SLOT,

menu/cbs/menu_cbs_ok.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4011,6 +4011,40 @@ static int action_ok_remap_file_flush(const char *path,
40114011
return 0;
40124012
}
40134013

4014+
static void menu_input_st_string_cb_config_file_save_as(
4015+
void *userdata, const char *str)
4016+
{
4017+
#ifdef HAVE_CONFIGFILE
4018+
if (str && *str)
4019+
{
4020+
rarch_setting_t *setting = NULL;
4021+
struct menu_state *menu_st = menu_state_get_ptr();
4022+
const char *label = menu_st->input_dialog_kb_label;
4023+
4024+
if (!string_is_empty(label))
4025+
setting = menu_setting_find(label);
4026+
4027+
if (setting)
4028+
{
4029+
if (setting->value.target.string)
4030+
strlcpy(setting->value.target.string, str, setting->size);
4031+
if (setting->change_handler)
4032+
setting->change_handler(setting);
4033+
menu_setting_generic(setting, 0, false);
4034+
}
4035+
else if (!string_is_empty(label))
4036+
command_event(CMD_EVENT_MENU_SAVE_AS_CONFIG, (void*)str);
4037+
}
4038+
4039+
menu_input_dialog_end();
4040+
#endif
4041+
}
4042+
4043+
DEFAULT_ACTION_DIALOG_START(action_ok_save_as_config,
4044+
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVE_AS_CONFIG),
4045+
(unsigned)idx,
4046+
menu_input_st_string_cb_config_file_save_as)
4047+
40144048
static void menu_input_st_string_cb_override_file_save_as(
40154049
void *userdata, const char *str)
40164050
{
@@ -5726,6 +5760,7 @@ int action_ok_close_content(const char *path, const char *label, unsigned type,
57265760
STATIC_DEFAULT_ACTION_OK_CMD_FUNC(action_ok_cheat_apply_changes, CMD_EVENT_CHEATS_APPLY)
57275761
STATIC_DEFAULT_ACTION_OK_CMD_FUNC(action_ok_quit, CMD_EVENT_QUIT)
57285762
STATIC_DEFAULT_ACTION_OK_CMD_FUNC(action_ok_save_new_config, CMD_EVENT_MENU_SAVE_CONFIG)
5763+
STATIC_DEFAULT_ACTION_OK_CMD_FUNC(action_ok_save_main_config, CMD_EVENT_MENU_SAVE_MAIN_CONFIG)
57295764
STATIC_DEFAULT_ACTION_OK_CMD_FUNC(action_ok_resume_content, CMD_EVENT_RESUME)
57305765
STATIC_DEFAULT_ACTION_OK_CMD_FUNC(action_ok_restart_content, CMD_EVENT_RESET)
57315766
STATIC_DEFAULT_ACTION_OK_CMD_FUNC(action_ok_screenshot, CMD_EVENT_TAKE_SCREENSHOT)
@@ -9088,6 +9123,8 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
90889123
{MENU_ENUM_LABEL_QUIT_RETROARCH, action_ok_quit},
90899124
{MENU_ENUM_LABEL_CLOSE_CONTENT, action_ok_close_content},
90909125
{MENU_ENUM_LABEL_SAVE_NEW_CONFIG, action_ok_save_new_config},
9126+
{MENU_ENUM_LABEL_SAVE_MAIN_CONFIG, action_ok_save_main_config},
9127+
{MENU_ENUM_LABEL_SAVE_AS_CONFIG, action_ok_save_as_config},
90919128
{MENU_ENUM_LABEL_HELP, action_ok_help},
90929129
{MENU_ENUM_LABEL_HELP_CONTROLS, action_ok_help_controls},
90939130
{MENU_ENUM_LABEL_HELP_WHAT_IS_A_CORE, action_ok_help_what_is_a_core},

menu/cbs/menu_cbs_sublabel.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,8 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_accessibility_narrator_speech_speed,
236236
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_load_config, MENU_ENUM_SUBLABEL_CONFIGURATIONS)
237237
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_save_current_config, MENU_ENUM_SUBLABEL_SAVE_CURRENT_CONFIG)
238238
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_save_new_config, MENU_ENUM_SUBLABEL_SAVE_NEW_CONFIG)
239+
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_save_as_config, MENU_ENUM_SUBLABEL_SAVE_AS_CONFIG)
240+
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_save_main_config, MENU_ENUM_SUBLABEL_SAVE_MAIN_CONFIG)
239241
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_reset_to_default_config, MENU_ENUM_SUBLABEL_RESET_TO_DEFAULT_CONFIG)
240242
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_override_options, MENU_ENUM_SUBLABEL_QUICK_MENU_OVERRIDE_OPTIONS)
241243
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_start_streaming, MENU_ENUM_SUBLABEL_QUICK_MENU_START_STREAMING)
@@ -3436,6 +3438,12 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
34363438
case MENU_ENUM_LABEL_SAVE_NEW_CONFIG:
34373439
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_save_new_config);
34383440
break;
3441+
case MENU_ENUM_LABEL_SAVE_AS_CONFIG:
3442+
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_save_as_config);
3443+
break;
3444+
case MENU_ENUM_LABEL_SAVE_MAIN_CONFIG:
3445+
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_save_main_config);
3446+
break;
34393447
case MENU_ENUM_LABEL_RESET_TO_DEFAULT_CONFIG:
34403448
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_reset_to_default_config);
34413449
break;

menu/drivers/ozone.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2085,6 +2085,8 @@ static uintptr_t ozone_entries_icon_get_texture(
20852085
case MENU_ENUM_LABEL_SETTINGS_SHOW_SAVING:
20862086
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG:
20872087
case MENU_ENUM_LABEL_SAVE_NEW_CONFIG:
2088+
case MENU_ENUM_LABEL_SAVE_AS_CONFIG:
2089+
case MENU_ENUM_LABEL_SAVE_MAIN_CONFIG:
20882090
case MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT:
20892091
case MENU_ENUM_LABEL_REMAP_SAVE_ON_EXIT:
20902092
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE:

menu/drivers/xmb.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3660,6 +3660,8 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
36603660
case MENU_ENUM_LABEL_SETTINGS_SHOW_SAVING:
36613661
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG:
36623662
case MENU_ENUM_LABEL_SAVE_NEW_CONFIG:
3663+
case MENU_ENUM_LABEL_SAVE_AS_CONFIG:
3664+
case MENU_ENUM_LABEL_SAVE_MAIN_CONFIG:
36633665
case MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT:
36643666
case MENU_ENUM_LABEL_REMAP_SAVE_ON_EXIT:
36653667
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE:

menu/menu_displaylist.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10887,6 +10887,18 @@ unsigned menu_displaylist_build_list(
1088710887
MENU_ENUM_LABEL_SAVE_NEW_CONFIG,
1088810888
MENU_SETTING_ACTION, 0, 0, NULL))
1088910889
count++;
10890+
if (menu_entries_append(list,
10891+
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVE_AS_CONFIG),
10892+
msg_hash_to_str(MENU_ENUM_LABEL_SAVE_AS_CONFIG),
10893+
MENU_ENUM_LABEL_SAVE_AS_CONFIG,
10894+
MENU_SETTING_ACTION, 0, 0, NULL))
10895+
count++;
10896+
if (menu_entries_append(list,
10897+
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SAVE_MAIN_CONFIG),
10898+
msg_hash_to_str(MENU_ENUM_LABEL_SAVE_MAIN_CONFIG),
10899+
MENU_ENUM_LABEL_SAVE_MAIN_CONFIG,
10900+
MENU_SETTING_ACTION, 0, 0, NULL))
10901+
count++;
1089010902
if (menu_entries_append(list,
1089110903
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RESET_TO_DEFAULT_CONFIG),
1089210904
msg_hash_to_str(MENU_ENUM_LABEL_RESET_TO_DEFAULT_CONFIG),

msg_hash.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3320,6 +3320,8 @@ enum msg_hash_enums
33203320
MENU_LBL_H(SHADER_WATCH_FOR_CHANGES),
33213321
MENU_LABEL(VIDEO_SHADER_REMEMBER_LAST_DIR),
33223322
MENU_LABEL(SAVE_NEW_CONFIG),
3323+
MENU_LABEL(SAVE_AS_CONFIG),
3324+
MENU_LABEL(SAVE_MAIN_CONFIG),
33233325
MENU_LABEL(ONSCREEN_DISPLAY_SETTINGS),
33243326
MENU_LABEL(ONSCREEN_OVERLAY_SETTINGS),
33253327
MENU_LABEL(OVERLAY_LIGHTGUN_SETTINGS),

retroarch.c

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4649,6 +4649,53 @@ bool command_event(enum event_command cmd, void *data)
46494649
return false;
46504650
#endif
46514651
break;
4652+
case CMD_EVENT_MENU_SAVE_AS_CONFIG:
4653+
{
4654+
char as_path[PATH_MAX_LENGTH];
4655+
char conf_path[PATH_MAX_LENGTH];
4656+
4657+
snprintf(as_path, sizeof(as_path), "%s", (char *)data);
4658+
4659+
/* Prepend '.cfg' extension if missing */
4660+
if (!string_ends_with(as_path, FILE_PATH_CONFIG_EXTENSION))
4661+
strlcat(as_path, FILE_PATH_CONFIG_EXTENSION, sizeof(as_path));
4662+
4663+
fill_pathname_join(conf_path,
4664+
settings->paths.directory_menu_config,
4665+
as_path, sizeof(conf_path));
4666+
4667+
path_set(RARCH_PATH_CONFIG, conf_path);
4668+
#ifdef HAVE_CONFIGFILE
4669+
command_event_save_current_config(OVERRIDE_NONE);
4670+
#endif
4671+
}
4672+
break;
4673+
case CMD_EVENT_MENU_SAVE_MAIN_CONFIG:
4674+
{
4675+
char app_path[PATH_MAX_LENGTH] = {0};
4676+
char conf_path[PATH_MAX_LENGTH];
4677+
4678+
#if defined(_WIN32) && !defined(_XBOX)
4679+
#if defined(__WINRT__) || defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
4680+
/* On UWP, the app install directory is not writable so use the writable LocalState dir instead */
4681+
fill_pathname_home_dir(app_path, sizeof(app_path));
4682+
#else
4683+
fill_pathname_application_dir(app_path, sizeof(app_path));
4684+
#endif
4685+
fill_pathname_resolve_relative(conf_path, app_path,
4686+
FILE_PATH_MAIN_CONFIG, sizeof(conf_path));
4687+
#elif !defined(RARCH_CONSOLE)
4688+
if (fill_pathname_application_data(app_path, sizeof(app_path)))
4689+
fill_pathname_join_special(conf_path, app_path,
4690+
FILE_PATH_MAIN_CONFIG, sizeof(conf_path));
4691+
#endif
4692+
4693+
path_set(RARCH_PATH_CONFIG, conf_path);
4694+
#ifdef HAVE_CONFIGFILE
4695+
command_event_save_current_config(OVERRIDE_NONE);
4696+
#endif
4697+
}
4698+
break;
46524699
case CMD_EVENT_PAUSE_TOGGLE:
46534700
{
46544701
bool paused = (runloop_st->flags & RUNLOOP_FLAG_PAUSED) ? true : false;

0 commit comments

Comments
 (0)