Add 'Manage Remap Files' submenu + automatically save input remaps when closing content

This commit is contained in:
jdgleaver 2022-03-16 16:59:07 +00:00 committed by Autechre
parent 96ddb301b6
commit ea77410037
21 changed files with 368 additions and 156 deletions

View File

@ -2634,7 +2634,7 @@ void config_set_defaults(void *data)
#endif
input_config_reset();
input_remapping_deinit();
input_remapping_deinit(false);
input_remapping_set_defaults(false);
/* Verify that binds are in proper order. */
@ -5102,7 +5102,7 @@ bool input_remapping_load_file(void *data, const char *path)
if (!string_is_empty(runloop_st->name.remapfile))
{
input_remapping_deinit();
input_remapping_deinit(false);
input_remapping_set_defaults(false);
}
runloop_st->name.remapfile = strdup(path);
@ -5213,7 +5213,7 @@ bool input_remapping_load_file(void *data, const char *path)
/**
* input_remapping_save_file:
* @path : Path to remapping file (relative path).
* @path : Path to remapping file.
*
* Saves remapping values to file.
*
@ -5223,23 +5223,33 @@ bool input_remapping_save_file(const char *path)
{
bool ret;
unsigned i, j;
char remap_file[PATH_MAX_LENGTH];
char remap_file_dir[PATH_MAX_LENGTH];
char key_strings[RARCH_FIRST_CUSTOM_BIND + 8][8] = {
"b", "y", "select", "start",
"up", "down", "left", "right",
"a", "x", "l", "r", "l2", "r2",
"l3", "r3", "l_x+", "l_x-", "l_y+", "l_y-", "r_x+", "r_x-", "r_y+", "r_y-" };
config_file_t *conf = NULL;
settings_t *settings = config_st;
unsigned max_users = settings->uints.input_max_users;
const char *dir_input_remapping = settings->paths.directory_input_remapping;
const char *remap_file = path;
config_file_t *conf = NULL;
runloop_state_t *runloop_st = runloop_state_get_ptr();
settings_t *settings = config_st;
unsigned max_users = settings->uints.input_max_users;
remap_file[0] = '\0';
remap_file_dir[0] = '\0';
fill_pathname_join_concat(remap_file, dir_input_remapping, path,
FILE_PATH_REMAP_EXTENSION,
sizeof(remap_file));
if (string_is_empty(remap_file))
return false;
/* Create output directory, if required */
strlcpy(remap_file_dir, remap_file, sizeof(remap_file_dir));
path_parent_dir(remap_file_dir);
if (!string_is_empty(remap_file_dir) &&
!path_is_directory(remap_file_dir) &&
!path_mkdir(remap_file_dir))
return false;
/* Attempt to load file */
if (!(conf = config_file_new_from_path_to_string(remap_file)))
{
if (!(conf = config_file_new_alloc()))
@ -5361,18 +5371,18 @@ bool input_remapping_save_file(const char *path)
ret = config_file_write(conf, remap_file, true);
config_file_free(conf);
return ret;
}
/* Cache remap file path
* > Must guard against the case where
* runloop_st->name.remapfile itself
* is passed to this function... */
if (runloop_st->name.remapfile != remap_file)
{
if (runloop_st->name.remapfile)
free(runloop_st->name.remapfile);
runloop_st->name.remapfile = strdup(remap_file);
}
bool input_remapping_remove_file(const char *path,
const char *dir_input_remapping)
{
char remap_file[PATH_MAX_LENGTH];
remap_file[0] = '\0';
fill_pathname_join_concat(remap_file, dir_input_remapping, path,
FILE_PATH_REMAP_EXTENSION,
sizeof(remap_file));
return filestream_delete(remap_file) == 0 ? true : false;
return ret;
}
#endif

View File

@ -5254,11 +5254,16 @@ void input_remapping_update_port_map(void)
}
}
void input_remapping_deinit(void)
void input_remapping_deinit(bool save_remap)
{
runloop_state_t *runloop_st = runloop_state_get_ptr();
if (runloop_st->name.remapfile)
{
if (save_remap)
input_remapping_save_file(runloop_st->name.remapfile);
free(runloop_st->name.remapfile);
}
runloop_st->name.remapfile = NULL;
runloop_st->remaps_core_active = false;
runloop_st->remaps_content_dir_active = false;

View File

@ -40,15 +40,12 @@ bool input_remapping_load_file(void *data, const char *path);
/**
* Saves remapping values to file.
*
* @param path Relative path to remapping file.
* @param path Path to remapping file.
*
* @return true (1) if successful, otherwise false (0).
**/
bool input_remapping_save_file(const char *path);
bool input_remapping_remove_file(const char *path,
const char *dir_input_remapping);
/**
* Caches any global configuration settings that should not be overwritten by
* input remap changes made while content is running. Must be called on each
@ -86,8 +83,12 @@ void input_remapping_update_port_map(void);
/**
* Frees runloop_st->name.remapfile and sets these runloop_state flags to false:
* remaps_core_active, remaps_content_dir_active, and remaps_game_active.
*
* @param save_remap If true, current remap settings will be saved to
* runloop_st->name.remapfile before performing
* deinitialisation.
*/
void input_remapping_deinit(void);
void input_remapping_deinit(bool save_remap);
/**
* Used to set the default mapping values within the `settings` struct

View File

@ -2784,6 +2784,18 @@ MSG_HASH(
MENU_ENUM_LABEL_RECORD_USE_OUTPUT_DIRECTORY,
"record_use_output_directory"
)
MSG_HASH(
MENU_ENUM_LABEL_DEFERRED_REMAP_FILE_MANAGER_LIST,
"deferred_remap_file_manager_list"
)
MSG_HASH(
MENU_ENUM_LABEL_REMAP_FILE_MANAGER_LIST,
"remap_file_manager_list"
)
MSG_HASH(
MENU_ENUM_LABEL_REMAP_FILE_INFO,
"remap_file_info"
)
MSG_HASH(
MENU_ENUM_LABEL_REMAP_FILE_LOAD,
"remap_file_load"
@ -2812,6 +2824,8 @@ MSG_HASH(
MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME,
"remap_file_remove_game"
)
MSG_HASH(
MENU_ENUM_LABEL_RESTART_CONTENT,
"restart_content"

View File

@ -7051,6 +7051,21 @@ MSG_HASH(
/* Quick Menu > Controls */
MSG_HASH(
MENU_ENUM_LABEL_VALUE_REMAP_FILE_MANAGER_LIST,
"Manage Remap Files"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_REMAP_FILE_MANAGER_LIST,
"Load, save or remove input remap files for the current content."
)
/* Quick Menu > Controls > Manage Remap Files */
MSG_HASH(
MENU_ENUM_LABEL_VALUE_REMAP_FILE_INFO,
"Active Remap File:"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD,
"Load Remap File"
@ -7080,7 +7095,7 @@ MSG_HASH(
"Delete Game Remap File"
)
/* Quick Menu > Controls > Load Remap File */
/* Quick Menu > Controls > Manage Remap Files > Load Remap File */
MSG_HASH(
MENU_ENUM_LABEL_VALUE_REMAP_FILE,

View File

@ -127,6 +127,7 @@ GENERIC_DEFERRED_PUSH(deferred_push_core_counters, DISPLAYLIST_
GENERIC_DEFERRED_PUSH(deferred_push_frontend_counters, DISPLAYLIST_PERFCOUNTERS_FRONTEND)
GENERIC_DEFERRED_PUSH(deferred_push_core_cheat_options, DISPLAYLIST_OPTIONS_CHEATS)
GENERIC_DEFERRED_PUSH(deferred_push_core_input_remapping_options, DISPLAYLIST_OPTIONS_REMAPPINGS)
GENERIC_DEFERRED_PUSH(deferred_push_remap_file_manager, DISPLAYLIST_REMAP_FILE_MANAGER)
GENERIC_DEFERRED_PUSH(deferred_push_core_options, DISPLAYLIST_CORE_OPTIONS)
GENERIC_DEFERRED_PUSH(deferred_push_core_option_override_list, DISPLAYLIST_CORE_OPTION_OVERRIDE_LIST)
GENERIC_DEFERRED_PUSH(deferred_push_disk_options, DISPLAYLIST_OPTIONS_DISK)
@ -857,6 +858,7 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
{MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE, deferred_push_video_shader_preset_save},
{MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS, deferred_push_core_cheat_options},
{MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS, deferred_push_core_input_remapping_options},
{MENU_ENUM_LABEL_DEFERRED_REMAP_FILE_MANAGER_LIST, deferred_push_remap_file_manager},
{MENU_ENUM_LABEL_VIDEO_SHADER_PRESET, deferred_push_video_shader_preset},
{MENU_ENUM_LABEL_VIDEO_SHADER_PASS, deferred_push_video_shader_pass},
{MENU_ENUM_LABEL_VIDEO_FILTER, deferred_push_video_filter},
@ -1169,6 +1171,9 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
case MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_input_remapping_options);
break;
case MENU_ENUM_LABEL_DEFERRED_REMAP_FILE_MANAGER_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_remap_file_manager);
break;
case MENU_ENUM_LABEL_CORE_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_core_list);
break;

View File

@ -140,7 +140,7 @@ static void menu_action_setting_disp_set_label_cheevos_entry(
}
#endif
static void menu_action_setting_disp_set_label_remap_file_load(
static void menu_action_setting_disp_set_label_remap_file_info(
file_list_t* list,
unsigned *w, unsigned type, unsigned i,
const char *label,
@ -149,12 +149,21 @@ static void menu_action_setting_disp_set_label_remap_file_load(
char *s2, size_t len2)
{
runloop_state_t *runloop_st = runloop_state_get_ptr();
const char *remap_path = runloop_st->name.remapfile;
const char *remap_file = NULL;
*s = '\0';
*w = 19;
if (!string_is_empty(remap_path))
remap_file = path_basename_nocompression(remap_path);
if (!string_is_empty(remap_file))
strlcpy(s, remap_file, len);
else
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE), len);
strlcpy(s2, path, len2);
if (!string_is_empty(runloop_st->name.remapfile))
fill_pathname_base(s, runloop_st->name.remapfile,
len);
}
static void menu_action_setting_disp_set_label_configurations(
@ -1887,9 +1896,9 @@ static int menu_cbs_init_bind_get_string_representation_compare_label(
menu_action_setting_disp_set_label_cheat_num_passes);
#endif
break;
case MENU_ENUM_LABEL_REMAP_FILE_LOAD:
case MENU_ENUM_LABEL_REMAP_FILE_INFO:
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_remap_file_load);
menu_action_setting_disp_set_label_remap_file_info);
break;
case MENU_ENUM_LABEL_VIDEO_SHADER_FILTER_PASS:
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)

View File

@ -494,6 +494,8 @@ static enum msg_hash_enums action_ok_dl_to_enum(unsigned lbl)
#endif
case ACTION_OK_DL_CORE_OPTION_OVERRIDE_LIST:
return MENU_ENUM_LABEL_DEFERRED_CORE_OPTION_OVERRIDE_LIST;
case ACTION_OK_DL_REMAP_FILE_MANAGER_LIST:
return MENU_ENUM_LABEL_DEFERRED_REMAP_FILE_MANAGER_LIST;
default:
break;
}
@ -1584,6 +1586,7 @@ int generic_action_ok_displaylist_push(const char *path,
case ACTION_OK_DL_CORE_MANAGER_STEAM_LIST:
#endif
case ACTION_OK_DL_CORE_OPTION_OVERRIDE_LIST:
case ACTION_OK_DL_REMAP_FILE_MANAGER_LIST:
ACTION_OK_DL_LBL(action_ok_dl_to_enum(action_type), DISPLAYLIST_GENERIC);
break;
case ACTION_OK_DL_CDROM_INFO_DETAIL_LIST:
@ -2226,7 +2229,7 @@ DEFAULT_ACTION_OK_SET(action_ok_cheat_file_load, ACTION_OK_LOAD_CHEAT_FILE,
DEFAULT_ACTION_OK_SET(action_ok_cheat_file_load_append, ACTION_OK_LOAD_CHEAT_FILE_APPEND, MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS)
DEFAULT_ACTION_OK_SET(action_ok_record_configfile_load, ACTION_OK_LOAD_RECORD_CONFIGFILE, MENU_ENUM_LABEL_RECORDING_SETTINGS)
DEFAULT_ACTION_OK_SET(action_ok_stream_configfile_load, ACTION_OK_LOAD_STREAM_CONFIGFILE, MENU_ENUM_LABEL_RECORDING_SETTINGS)
DEFAULT_ACTION_OK_SET(action_ok_remap_file_load, ACTION_OK_LOAD_REMAPPING_FILE, MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS )
DEFAULT_ACTION_OK_SET(action_ok_remap_file_load, ACTION_OK_LOAD_REMAPPING_FILE, MENU_ENUM_LABEL_DEFERRED_REMAP_FILE_MANAGER_LIST)
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
DEFAULT_ACTION_OK_SET(action_ok_shader_preset_load, ACTION_OK_LOAD_PRESET , MENU_ENUM_LABEL_SHADER_OPTIONS)
DEFAULT_ACTION_OK_SET(action_ok_shader_pass_load, ACTION_OK_LOAD_SHADER_PASS, MENU_ENUM_LABEL_SHADER_OPTIONS)
@ -3420,63 +3423,63 @@ static int generic_action_ok_remap_file_operation(const char *path,
unsigned action_type)
{
#ifdef HAVE_CONFIGFILE
char directory[PATH_MAX_LENGTH];
char file[PATH_MAX_LENGTH];
char content_dir[PATH_MAX_LENGTH];
struct retro_system_info *system = &runloop_state_get_ptr()->system.info;
const char *core_name = system ? system->library_name : NULL;
const char *rarch_path_basename = path_get(RARCH_PATH_BASENAME);
bool has_content = !string_is_empty(rarch_path_basename);
settings_t *settings = config_get_ptr();
const char *path_dir_input_remapping = settings->paths.directory_input_remapping;
char content_dir_name[PATH_MAX_LENGTH];
char remap_file_path[PATH_MAX_LENGTH];
rarch_system_info_t *system = &runloop_state_get_ptr()->system;
const char *core_name = system ? system->info.library_name : NULL;
const char *rarch_path_basename = path_get(RARCH_PATH_BASENAME);
bool has_content = !string_is_empty(rarch_path_basename);
settings_t *settings = config_get_ptr();
const char *directory_input_remapping = settings->paths.directory_input_remapping;
bool refresh = false;
directory[0] = '\0';
file[0] = '\0';
content_dir[0] = '\0';
content_dir_name[0] = '\0';
remap_file_path[0] = '\0';
/* Cannot perform remap file operation if we
* have no core */
if (string_is_empty(core_name))
return menu_cbs_exit();
/* Get base remap file directory */
fill_pathname_join(
directory,
path_dir_input_remapping,
core_name,
sizeof(directory));
if (!path_is_directory(directory))
path_mkdir(directory);
switch (action_type)
{
case ACTION_OK_REMAP_FILE_SAVE_CORE:
case ACTION_OK_REMAP_FILE_REMOVE_CORE:
fill_pathname_join(file, core_name, core_name, sizeof(file));
fill_pathname_join_special_ext(remap_file_path,
directory_input_remapping, core_name,
core_name,
FILE_PATH_REMAP_EXTENSION,
sizeof(remap_file_path));
break;
case ACTION_OK_REMAP_FILE_SAVE_GAME:
case ACTION_OK_REMAP_FILE_REMOVE_GAME:
if (has_content)
fill_pathname_join(file, core_name,
path_basename(rarch_path_basename), sizeof(file));
fill_pathname_join_special_ext(remap_file_path,
directory_input_remapping, core_name,
path_basename(rarch_path_basename),
FILE_PATH_REMAP_EXTENSION,
sizeof(remap_file_path));
break;
case ACTION_OK_REMAP_FILE_SAVE_CONTENT_DIR:
case ACTION_OK_REMAP_FILE_REMOVE_CONTENT_DIR:
if (has_content)
{
fill_pathname_parent_dir_name(content_dir,
rarch_path_basename, sizeof(content_dir));
fill_pathname_join(file, core_name,
content_dir, sizeof(file));
fill_pathname_parent_dir_name(content_dir_name,
rarch_path_basename, sizeof(content_dir_name));
fill_pathname_join_special_ext(remap_file_path,
directory_input_remapping, core_name,
content_dir_name,
FILE_PATH_REMAP_EXTENSION,
sizeof(remap_file_path));
}
break;
}
if (action_type < ACTION_OK_REMAP_FILE_REMOVE_CORE)
{
if (!string_is_empty(file) &&
input_remapping_save_file(file))
if (!string_is_empty(remap_file_path) &&
input_remapping_save_file(remap_file_path))
{
switch (action_type)
{
@ -3504,29 +3507,29 @@ static int generic_action_ok_remap_file_operation(const char *path,
}
else
{
if (!string_is_empty(file) &&
input_remapping_remove_file(file, path_dir_input_remapping))
if (!string_is_empty(remap_file_path) &&
(filestream_delete(remap_file_path) == 0))
{
switch (action_type)
{
case ACTION_OK_REMAP_FILE_REMOVE_CORE:
if (retroarch_ctl(RARCH_CTL_IS_REMAPS_CORE_ACTIVE, NULL))
{
input_remapping_deinit();
input_remapping_deinit(false);
input_remapping_set_defaults(false);
}
break;
case ACTION_OK_REMAP_FILE_REMOVE_GAME:
if (retroarch_ctl(RARCH_CTL_IS_REMAPS_GAME_ACTIVE, NULL))
{
input_remapping_deinit();
input_remapping_deinit(false);
input_remapping_set_defaults(false);
}
break;
case ACTION_OK_REMAP_FILE_REMOVE_CONTENT_DIR:
if (retroarch_ctl(RARCH_CTL_IS_REMAPS_CONTENT_DIR_ACTIVE, NULL))
{
input_remapping_deinit();
input_remapping_deinit(false);
input_remapping_set_defaults(false);
}
break;
@ -3536,6 +3539,11 @@ static int generic_action_ok_remap_file_operation(const char *path,
msg_hash_to_str(MSG_REMAP_FILE_REMOVED_SUCCESSFULLY),
1, 100, true,
NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
/* After removing a remap file, attempt to
* load any remaining remap file with the
* next highest priority */
config_load_remap(directory_input_remapping, system);
}
else
runloop_msg_queue_push(
@ -3543,6 +3551,10 @@ static int generic_action_ok_remap_file_operation(const char *path,
1, 100, true,
NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
}
/* Refresh menu */
menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh);
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL);
#endif
return 0;
}
@ -5809,6 +5821,7 @@ DEFAULT_ACTION_OK_FUNC(action_ok_push_core_manager_list, ACTION_OK_DL_CORE_MANAG
DEFAULT_ACTION_OK_FUNC(action_ok_push_core_manager_steam_list, ACTION_OK_DL_CORE_MANAGER_STEAM_LIST)
#endif
DEFAULT_ACTION_OK_FUNC(action_ok_push_core_option_override_list, ACTION_OK_DL_CORE_OPTION_OVERRIDE_LIST)
DEFAULT_ACTION_OK_FUNC(action_ok_push_remap_file_manager_list, ACTION_OK_DL_REMAP_FILE_MANAGER_LIST)
DEFAULT_ACTION_OK_FUNC(action_ok_push_core_options_list, ACTION_OK_DL_CORE_OPTIONS_LIST)
static int action_ok_open_uwp_permission_settings(const char *path,
@ -8138,6 +8151,7 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_SHADER_OPTIONS, action_ok_push_default},
{MENU_ENUM_LABEL_CORE_OPTIONS, action_ok_push_core_options_list},
{MENU_ENUM_LABEL_CORE_OPTION_OVERRIDE_LIST, action_ok_push_core_option_override_list},
{MENU_ENUM_LABEL_REMAP_FILE_MANAGER_LIST, action_ok_push_remap_file_manager_list},
{MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS, action_ok_push_default},
{MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS, action_ok_push_default},
{MENU_ENUM_LABEL_DISC_INFORMATION, action_ok_push_default},

View File

@ -81,12 +81,24 @@ static int action_start_audio_mixer_stream_volume(
}
#endif
static int action_start_remap_file_load(
static int action_start_remap_file_info(
const char *path, const char *label,
unsigned type, size_t idx, size_t entry_idx)
{
input_remapping_deinit();
settings_t *settings = config_get_ptr();
const char *directory_input_remapping = settings ?
settings->paths.directory_input_remapping : NULL;
rarch_system_info_t *system = &runloop_state_get_ptr()->system;
bool refresh = false;
input_remapping_deinit(false);
input_remapping_set_defaults(false);
config_load_remap(directory_input_remapping, system);
/* Refresh menu */
menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh);
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL);
return 0;
}
@ -712,8 +724,8 @@ static int menu_cbs_init_bind_start_compare_label(menu_file_list_cbs_t *cbs)
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET:
BIND_ACTION_START(cbs, action_start_shader_preset);
break;
case MENU_ENUM_LABEL_REMAP_FILE_LOAD:
BIND_ACTION_START(cbs, action_start_remap_file_load);
case MENU_ENUM_LABEL_REMAP_FILE_INFO:
BIND_ACTION_START(cbs, action_start_remap_file_info);
break;
case MENU_ENUM_LABEL_VIDEO_FILTER:
BIND_ACTION_START(cbs, action_start_video_filter_file_load);

View File

@ -833,6 +833,7 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_save_current_config_override_content
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_save_current_config_override_game, MENU_ENUM_SUBLABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_shader_options, MENU_ENUM_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_remap_file_manager_list, MENU_ENUM_SUBLABEL_REMAP_FILE_MANAGER_LIST)
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)
@ -2893,6 +2894,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_input_remapping_options);
break;
case MENU_ENUM_LABEL_REMAP_FILE_MANAGER_LIST:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_remap_file_manager_list);
break;
case MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS:
#ifdef HAVE_CHEATS
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_cheat_options);

View File

@ -586,6 +586,7 @@ DEFAULT_TITLE_MACRO(action_get_configurations_list, MENU_ENUM_LABEL_
DEFAULT_TITLE_MACRO(action_get_core_option_override_list, MENU_ENUM_LABEL_VALUE_CORE_OPTION_OVERRIDE_LIST)
DEFAULT_TITLE_MACRO(action_get_quick_menu_list, MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS)
DEFAULT_TITLE_MACRO(action_get_input_remapping_options_list, MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS)
DEFAULT_TITLE_MACRO(action_get_remap_file_manager_list, MENU_ENUM_LABEL_VALUE_REMAP_FILE_MANAGER_LIST)
DEFAULT_TITLE_MACRO(action_get_shader_options_list, MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS)
DEFAULT_TITLE_MACRO(action_get_disk_options_list, MENU_ENUM_LABEL_VALUE_DISK_OPTIONS)
DEFAULT_TITLE_MACRO(action_get_frontend_counters_list, MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS)
@ -1174,6 +1175,8 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
action_get_quick_menu_list},
{MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS,
action_get_input_remapping_options_list},
{MENU_ENUM_LABEL_DEFERRED_REMAP_FILE_MANAGER_LIST,
action_get_remap_file_manager_list},
{MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS,
action_get_core_cheat_options_list},
{MENU_ENUM_LABEL_SHADER_OPTIONS,
@ -1509,6 +1512,9 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS:
BIND_ACTION_GET_TITLE(cbs, action_get_input_remapping_options_list);
break;
case MENU_ENUM_LABEL_DEFERRED_REMAP_FILE_MANAGER_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_remap_file_manager_list);
break;
case MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS:
BIND_ACTION_GET_TITLE(cbs, action_get_core_cheat_options_list);
break;

View File

@ -10131,6 +10131,8 @@ static void materialui_list_insert(
node->icon_type = MUI_ICON_TYPE_INTERNAL;
break;
case MENU_SETTING_ACTION_CORE_OPTION_OVERRIDE_LIST:
case MENU_SETTING_ACTION_REMAP_FILE_MANAGER_LIST:
case MENU_SETTING_ACTION_REMAP_FILE_LOAD:
node->icon_texture_index = MUI_TEXTURE_SETTINGS;
node->icon_type = MUI_ICON_TYPE_INTERNAL;
break;
@ -10186,12 +10188,18 @@ static void materialui_list_insert(
case MENU_SETTING_ACTION_AUDIO_DSP_PLUGIN_REMOVE:
case MENU_SETTING_ACTION_GAME_SPECIFIC_CORE_OPTIONS_REMOVE:
case MENU_SETTING_ACTION_FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE:
case MENU_SETTING_ACTION_REMAP_FILE_REMOVE_CORE:
case MENU_SETTING_ACTION_REMAP_FILE_REMOVE_CONTENT_DIR:
case MENU_SETTING_ACTION_REMAP_FILE_REMOVE_GAME:
node->icon_texture_index = MUI_TEXTURE_REMOVE;
node->icon_type = MUI_ICON_TYPE_INTERNAL;
break;
case MENU_SETTING_ACTION_CORE_CREATE_BACKUP:
case MENU_SETTING_ACTION_GAME_SPECIFIC_CORE_OPTIONS_CREATE:
case MENU_SETTING_ACTION_FOLDER_SPECIFIC_CORE_OPTIONS_CREATE:
case MENU_SETTING_ACTION_REMAP_FILE_SAVE_CORE:
case MENU_SETTING_ACTION_REMAP_FILE_SAVE_CONTENT_DIR:
case MENU_SETTING_ACTION_REMAP_FILE_SAVE_GAME:
node->icon_texture_index = MUI_TEXTURE_SAVE_STATE;
node->icon_type = MUI_ICON_TYPE_INTERNAL;
break;

View File

@ -1648,6 +1648,9 @@ static uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
case MENU_ENUM_LABEL_CORE_CREATE_BACKUP:
case MENU_ENUM_LABEL_GAME_SPECIFIC_CORE_OPTIONS_CREATE:
case MENU_ENUM_LABEL_FOLDER_SPECIFIC_CORE_OPTIONS_CREATE:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_CONTENT_DIR:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_SAVESTATE];
case MENU_ENUM_LABEL_LOAD_STATE:
case MENU_ENUM_LABEL_CORE_RESTORE_BACKUP_LIST:
@ -1692,7 +1695,6 @@ static uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
case MENU_ENUM_LABEL_CONTENT_SETTINGS:
case MENU_ENUM_LABEL_UPDATE_ASSETS:
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME:
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GLOBAL:
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GAME:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_QUICKMENU];
@ -1707,7 +1709,6 @@ static uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
case MENU_ENUM_LABEL_SWITCH_INSTALLED_CORES_PFD:
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CORE:
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE:
case MENU_ENUM_LABEL_SET_CORE_ASSOCIATION:
case MENU_ENUM_LABEL_CORE_INFORMATION:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CORE];
@ -1819,9 +1820,6 @@ static uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
case MENU_ENUM_LABEL_QUICK_MENU_STOP_STREAMING:
case MENU_ENUM_LABEL_QUICK_MENU_STOP_RECORDING:
case MENU_ENUM_LABEL_CHEAT_DELETE_ALL:
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE:
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME:
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CONTENT_DIR:
case MENU_ENUM_LABEL_CORE_DELETE:
case MENU_ENUM_LABEL_DELETE_PLAYLIST:
case MENU_ENUM_LABEL_CORE_DELETE_BACKUP_LIST:
@ -1829,6 +1827,9 @@ static uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
case MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN_REMOVE:
case MENU_ENUM_LABEL_GAME_SPECIFIC_CORE_OPTIONS_REMOVE:
case MENU_ENUM_LABEL_FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE:
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE:
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CONTENT_DIR:
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME:
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];
@ -1869,7 +1870,6 @@ static uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
case MENU_ENUM_LABEL_ADD_CONTENT_LIST:
case MENU_ENUM_LABEL_SCAN_DIRECTORY:
case MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_LIST:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_CONTENT_DIR:
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CONTENT_DIR:
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_PARENT:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_FOLDER];
@ -2020,6 +2020,7 @@ static uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
else
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CORE_OPTIONS];
case MENU_SETTING_ACTION_CORE_OPTION_OVERRIDE_LIST:
case MENU_SETTING_ACTION_REMAP_FILE_MANAGER_LIST:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_SETTING];
case MENU_SETTING_ACTION_CORE_INPUT_REMAPPING_OPTIONS:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_INPUT_REMAPPING_OPTIONS];

View File

@ -2565,6 +2565,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
case MENU_ENUM_LABEL_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE:
return xmb->textures.list[XMB_TEXTURE_CORE_OPTIONS];
case MENU_ENUM_LABEL_CORE_OPTION_OVERRIDE_LIST:
case MENU_ENUM_LABEL_REMAP_FILE_MANAGER_LIST:
return xmb->textures.list[XMB_TEXTURE_SETTING];
case MENU_ENUM_LABEL_ADD_TO_FAVORITES:
case MENU_ENUM_LABEL_ADD_TO_FAVORITES_PLAYLIST:
@ -2595,6 +2596,9 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
case MENU_ENUM_LABEL_CORE_CREATE_BACKUP:
case MENU_ENUM_LABEL_GAME_SPECIFIC_CORE_OPTIONS_CREATE:
case MENU_ENUM_LABEL_FOLDER_SPECIFIC_CORE_OPTIONS_CREATE:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_CONTENT_DIR:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME:
return xmb->textures.list[XMB_TEXTURE_SAVESTATE];
case MENU_ENUM_LABEL_LOAD_STATE:
case MENU_ENUM_LABEL_CONFIGURATIONS:
@ -2630,7 +2634,6 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
case MENU_ENUM_LABEL_DIRECTORY_SETTINGS:
case MENU_ENUM_LABEL_SCAN_DIRECTORY:
case MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_LIST:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_CONTENT_DIR:
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CONTENT_DIR:
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_PARENT:
case MENU_ENUM_LABEL_FAVORITES: /* "Start Directory" */
@ -2667,7 +2670,6 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
case MENU_ENUM_LABEL_CONTENT_SETTINGS:
case MENU_ENUM_LABEL_UPDATE_ASSETS:
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME:
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GLOBAL:
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GAME:
return xmb->textures.list[XMB_TEXTURE_QUICKMENU];
@ -2682,7 +2684,6 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
case MENU_ENUM_LABEL_SWITCH_INSTALLED_CORES_PFD:
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CORE:
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE:
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE:
case MENU_ENUM_LABEL_SET_CORE_ASSOCIATION:
case MENU_ENUM_LABEL_CORE_INFORMATION:
return xmb->textures.list[XMB_TEXTURE_CORE];
@ -2790,9 +2791,6 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
case MENU_ENUM_LABEL_QUICK_MENU_STOP_STREAMING:
case MENU_ENUM_LABEL_QUICK_MENU_STOP_RECORDING:
case MENU_ENUM_LABEL_CHEAT_DELETE_ALL:
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE:
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME:
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CONTENT_DIR:
case MENU_ENUM_LABEL_CORE_DELETE:
case MENU_ENUM_LABEL_DELETE_PLAYLIST:
case MENU_ENUM_LABEL_CORE_DELETE_BACKUP_LIST:
@ -2800,6 +2798,9 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
case MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN_REMOVE:
case MENU_ENUM_LABEL_GAME_SPECIFIC_CORE_OPTIONS_REMOVE:
case MENU_ENUM_LABEL_FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE:
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE:
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CONTENT_DIR:
case MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME:
return xmb->textures.list[XMB_TEXTURE_CLOSE];
case MENU_ENUM_LABEL_CORE_OPTIONS_RESET:
return xmb->textures.list[XMB_TEXTURE_UNDO];

View File

@ -218,7 +218,8 @@ enum
ACTION_OK_DL_CORE_RESTORE_BACKUP_LIST,
ACTION_OK_DL_CORE_DELETE_BACKUP_LIST,
ACTION_OK_DL_CORE_OPTION_OVERRIDE_LIST,
ACTION_OK_DL_CORE_OPTIONS_LIST
ACTION_OK_DL_CORE_OPTIONS_LIST,
ACTION_OK_DL_REMAP_FILE_MANAGER_LIST
};
/* Function callbacks */

View File

@ -1294,6 +1294,106 @@ end:
return count;
}
static unsigned menu_displaylist_parse_remap_file_manager_list(
menu_displaylist_info_t *info, settings_t *settings)
{
unsigned count = 0;
bool has_content = !string_is_empty(path_get(RARCH_PATH_CONTENT));
bool core_remap_active = retroarch_ctl(RARCH_CTL_IS_REMAPS_CORE_ACTIVE, NULL);
bool content_dir_remap_active = retroarch_ctl(RARCH_CTL_IS_REMAPS_CONTENT_DIR_ACTIVE, NULL);
bool game_remap_active = retroarch_ctl(RARCH_CTL_IS_REMAPS_GAME_ACTIVE, NULL);
/* Sanity check - cannot handle remap files
* unless a valid core is running */
if (!retroarch_ctl(RARCH_CTL_CORE_IS_RUNNING, NULL) ||
retroarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL))
goto end;
/* Show currently 'active' remap file */
if (menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_INFO),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_INFO),
MENU_ENUM_LABEL_REMAP_FILE_INFO,
MENU_SETTINGS_CORE_INFO_NONE, 0, 0))
count++;
/* Load remap file */
if (menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_LOAD),
MENU_ENUM_LABEL_REMAP_FILE_LOAD,
MENU_SETTING_ACTION_REMAP_FILE_LOAD, 0, 0))
count++;
/* Save remap files */
if (has_content &&
!game_remap_active &&
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME),
MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME,
MENU_SETTING_ACTION_REMAP_FILE_SAVE_GAME, 0, 0))
count++;
if (has_content &&
!game_remap_active &&
!content_dir_remap_active &&
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CONTENT_DIR),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_SAVE_CONTENT_DIR),
MENU_ENUM_LABEL_REMAP_FILE_SAVE_CONTENT_DIR,
MENU_SETTING_ACTION_REMAP_FILE_SAVE_CONTENT_DIR, 0, 0))
count++;
if (!game_remap_active &&
!content_dir_remap_active &&
!core_remap_active &&
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE),
MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE,
MENU_SETTING_ACTION_REMAP_FILE_SAVE_CORE, 0, 0))
count++;
/* Remove remap files */
if (has_content &&
game_remap_active &&
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_GAME),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME),
MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME,
MENU_SETTING_ACTION_REMAP_FILE_REMOVE_GAME, 0, 0))
count++;
if (has_content &&
content_dir_remap_active &&
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_CONTENT_DIR),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CONTENT_DIR),
MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CONTENT_DIR,
MENU_SETTING_ACTION_REMAP_FILE_REMOVE_CONTENT_DIR, 0, 0))
count++;
if (core_remap_active &&
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_CORE),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE),
MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE,
MENU_SETTING_ACTION_REMAP_FILE_REMOVE_CORE, 0, 0))
count++;
end:
/* Fallback */
if (count == 0)
if (menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_ENTRIES_TO_DISPLAY),
msg_hash_to_str(MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY),
MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY,
FILE_TYPE_NONE, 0, 0))
count++;
return count;
}
static unsigned menu_displaylist_parse_supported_cores(menu_displaylist_info_t *info,
settings_t *settings, const char *content_path,
enum msg_hash_enums core_enum_label,
@ -6574,56 +6674,12 @@ unsigned menu_displaylist_build_list(
unsigned max_users = settings->uints.input_max_users;
#ifdef HAVE_CONFIGFILE
bool has_content = !string_is_empty(path_get(RARCH_PATH_CONTENT));
if (menu_entries_append_enum(list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_LOAD),
MENU_ENUM_LABEL_REMAP_FILE_LOAD,
MENU_SETTING_ACTION, 0, 0))
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_MANAGER_LIST),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_MANAGER_LIST),
MENU_ENUM_LABEL_REMAP_FILE_MANAGER_LIST,
MENU_SETTING_ACTION_REMAP_FILE_MANAGER_LIST, 0, 0))
count++;
if (menu_entries_append_enum(list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CORE),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE),
MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE,
MENU_SETTING_ACTION, 0, 0))
count++;
if (has_content && menu_entries_append_enum(list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_CONTENT_DIR),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_SAVE_CONTENT_DIR),
MENU_ENUM_LABEL_REMAP_FILE_SAVE_CONTENT_DIR,
MENU_SETTING_ACTION, 0, 0))
count++;
if (has_content && menu_entries_append_enum(list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_SAVE_GAME),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME),
MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME,
MENU_SETTING_ACTION, 0, 0))
count++;
if (retroarch_ctl(RARCH_CTL_IS_REMAPS_CORE_ACTIVE, NULL))
if (menu_entries_append_enum(list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_CORE),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE),
MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE,
MENU_SETTING_ACTION, 0, 0))
count++;
if (has_content && retroarch_ctl(RARCH_CTL_IS_REMAPS_GAME_ACTIVE, NULL))
if (menu_entries_append_enum(list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_GAME),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME),
MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME,
MENU_SETTING_ACTION, 0, 0))
count++;
if (has_content && retroarch_ctl(RARCH_CTL_IS_REMAPS_CONTENT_DIR_ACTIVE, NULL))
if (menu_entries_append_enum(list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_REMAP_FILE_REMOVE_CONTENT_DIR),
msg_hash_to_str(MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CONTENT_DIR),
MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CONTENT_DIR,
MENU_SETTING_ACTION, 0, 0))
count++;
#endif
if (menu_entries_append_enum(list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_INPUT_TURBO_FIRE_SETTINGS),
@ -12277,6 +12333,29 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
info->need_push = true;
}
break;
case DISPLAYLIST_REMAP_FILE_MANAGER:
{
/* The number of items in the remap file manager
* list will vary depending upon which remap type
* is currently active (if any).
* To prevent the menu selection from going out
* of bounds, we therefore have to check that the
* current selection index is less than the current
* number of menu entries - if not, we reset the
* navigation pointer */
size_t selection = menu_navigation_get_selection();
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
count = menu_displaylist_parse_remap_file_manager_list(info, settings);
if (selection >= count)
{
info->need_refresh = true;
info->need_navigation_clear = true;
}
info->need_push = true;
}
break;
case DISPLAYLIST_ARCHIVE_ACTION:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
#ifdef HAVE_COMPRESSION

View File

@ -128,6 +128,7 @@ enum menu_displaylist_ctl_state
DISPLAYLIST_AUDIO_FILTERS,
DISPLAYLIST_VIDEO_FILTERS,
DISPLAYLIST_CHEAT_FILES,
DISPLAYLIST_REMAP_FILE_MANAGER,
DISPLAYLIST_REMAP_FILES,
DISPLAYLIST_RECORD_CONFIG_FILES,
DISPLAYLIST_STREAM_CONFIG_FILES,

View File

@ -129,6 +129,7 @@ enum menu_settings_type
MENU_SETTING_ACTION_CORE_OPTIONS,
MENU_SETTING_ACTION_CORE_OPTION_OVERRIDE_LIST,
MENU_SETTING_ACTION_CORE_INPUT_REMAPPING_OPTIONS,
MENU_SETTING_ACTION_REMAP_FILE_MANAGER_LIST,
MENU_SETTING_ACTION_CORE_CHEAT_OPTIONS,
MENU_SETTING_ACTION_CORE_MANAGER_OPTIONS,
#ifdef HAVE_MIST
@ -275,6 +276,14 @@ enum menu_settings_type
MENU_SETTING_ACTION_CORE_OPTIONS_RESET,
MENU_SETTING_ACTION_CORE_OPTIONS_FLUSH,
MENU_SETTING_ACTION_REMAP_FILE_LOAD,
MENU_SETTING_ACTION_REMAP_FILE_SAVE_CORE,
MENU_SETTING_ACTION_REMAP_FILE_SAVE_CONTENT_DIR,
MENU_SETTING_ACTION_REMAP_FILE_SAVE_GAME,
MENU_SETTING_ACTION_REMAP_FILE_REMOVE_CORE,
MENU_SETTING_ACTION_REMAP_FILE_REMOVE_CONTENT_DIR,
MENU_SETTING_ACTION_REMAP_FILE_REMOVE_GAME,
MENU_SETTING_ACTION_CONTENTLESS_CORE_RUN,
MENU_SETTINGS_LAST

View File

@ -1515,6 +1515,7 @@ enum msg_hash_enums
#ifdef HAVE_LAKKA
MENU_ENUM_LABEL_DEFERRED_EJECT_DISC,
#endif
MENU_ENUM_LABEL_DEFERRED_REMAP_FILE_MANAGER_LIST,
MENU_ENUM_LABEL_DEFERRED_REMAPPINGS_PORT_LIST,
MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST,
MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_SPECIAL,
@ -2438,7 +2439,6 @@ enum msg_hash_enums
MENU_LABEL(VIDEO_SHADER_PRESET),
MENU_LABEL(CHEAT_FILE_LOAD),
MENU_LABEL(CHEAT_FILE_LOAD_APPEND),
MENU_LABEL(REMAP_FILE_LOAD),
MENU_ENUM_LABEL_MESSAGE,
MENU_ENUM_LABEL_INFO_SCREEN,
@ -2588,12 +2588,16 @@ enum msg_hash_enums
MENU_ENUM_LABEL_EXIT_EMULATOR,
MENU_ENUM_LABEL_OSK_ENABLE,
MENU_LABEL(REMAP_FILE_MANAGER_LIST),
MENU_LABEL(REMAP_FILE_INFO),
MENU_LABEL(REMAP_FILE_LOAD),
MENU_LABEL(REMAP_FILE_SAVE_CORE),
MENU_LABEL(REMAP_FILE_SAVE_CONTENT_DIR),
MENU_LABEL(REMAP_FILE_SAVE_GAME),
MENU_LABEL(REMAP_FILE_REMOVE_CORE),
MENU_LABEL(REMAP_FILE_REMOVE_CONTENT_DIR),
MENU_LABEL(REMAP_FILE_REMOVE_GAME),
MENU_LABEL(RESTART_CONTENT),
MENU_LABEL(RESUME),
MENU_LABEL(RESUME_CONTENT),

View File

@ -1927,9 +1927,10 @@ bool command_event(enum event_command cmd, void *data)
if ( runloop_st->remaps_core_active
|| runloop_st->remaps_content_dir_active
|| runloop_st->remaps_game_active
|| !string_is_empty(runloop_st->name.remapfile)
)
{
input_remapping_deinit();
input_remapping_deinit(true);
input_remapping_set_defaults(true);
}
else
@ -5421,9 +5422,10 @@ bool retroarch_main_init(int argc, char *argv[])
if ( runloop_st->remaps_core_active
|| runloop_st->remaps_content_dir_active
|| runloop_st->remaps_game_active
|| !string_is_empty(runloop_st->name.remapfile)
)
{
input_remapping_deinit();
input_remapping_deinit(false);
input_remapping_set_defaults(true);
}
else
@ -5707,17 +5709,25 @@ bool retroarch_ctl(enum rarch_ctl_state state, void *data)
case RARCH_CTL_IS_OVERRIDES_ACTIVE:
return runloop_st->overrides_active;
case RARCH_CTL_SET_REMAPS_CORE_ACTIVE:
runloop_st->remaps_core_active = true;
/* Only one type of remap can be active
* at any one time */
runloop_st->remaps_core_active = true;
runloop_st->remaps_content_dir_active = false;
runloop_st->remaps_game_active = false;
break;
case RARCH_CTL_IS_REMAPS_CORE_ACTIVE:
return runloop_st->remaps_core_active;
case RARCH_CTL_SET_REMAPS_GAME_ACTIVE:
runloop_st->remaps_game_active = true;
runloop_st->remaps_core_active = false;
runloop_st->remaps_content_dir_active = false;
runloop_st->remaps_game_active = true;
break;
case RARCH_CTL_IS_REMAPS_GAME_ACTIVE:
return runloop_st->remaps_game_active;
case RARCH_CTL_SET_REMAPS_CONTENT_DIR_ACTIVE:
runloop_st->remaps_core_active = false;
runloop_st->remaps_content_dir_active = true;
runloop_st->remaps_game_active = false;
break;
case RARCH_CTL_IS_REMAPS_CONTENT_DIR_ACTIVE:
return runloop_st->remaps_content_dir_active;
@ -6053,9 +6063,10 @@ bool retroarch_main_quit(void)
if ( runloop_st->remaps_core_active
|| runloop_st->remaps_content_dir_active
|| runloop_st->remaps_game_active
|| !string_is_empty(runloop_st->name.remapfile)
)
{
input_remapping_deinit();
input_remapping_deinit(true);
input_remapping_set_defaults(true);
}
else

View File

@ -1930,9 +1930,10 @@ bool runloop_environment_cb(unsigned cmd, void *data)
if ( runloop_st->remaps_core_active
|| runloop_st->remaps_content_dir_active
|| runloop_st->remaps_game_active
|| !string_is_empty(runloop_st->name.remapfile)
)
{
input_remapping_deinit();
input_remapping_deinit(true);
input_remapping_set_defaults(true);
}
else
@ -5022,6 +5023,18 @@ void runloop_event_deinit_core(void)
runloop_st->fastmotion_override.pending = false;
}
if ( runloop_st->remaps_core_active
|| runloop_st->remaps_content_dir_active
|| runloop_st->remaps_game_active
|| !string_is_empty(runloop_st->name.remapfile)
)
{
input_remapping_deinit(true);
input_remapping_set_defaults(true);
}
else
input_remapping_restore_global_config(true);
RARCH_LOG("[Core]: Unloading core symbols..\n");
uninit_libretro_symbols(&runloop_st->current_core);
runloop_st->current_core.symbols_inited = false;
@ -5048,17 +5061,6 @@ void runloop_event_deinit_core(void)
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
runloop_st->runtime_shader_preset_path[0] = '\0';
#endif
if ( runloop_st->remaps_core_active
|| runloop_st->remaps_content_dir_active
|| runloop_st->remaps_game_active
)
{
input_remapping_deinit();
input_remapping_set_defaults(true);
}
else
input_remapping_restore_global_config(true);
}
static void runloop_path_init_savefile_internal(void)