diff --git a/config.def.h b/config.def.h index 0bfb35bd9b..dda01137e7 100644 --- a/config.def.h +++ b/config.def.h @@ -570,6 +570,7 @@ #define DEFAULT_REMAP_SAVE_ON_EXIT true #define DEFAULT_SHOW_HIDDEN_FILES false +#define DEFAULT_CORE_SUGGEST_ALWAYS false /* Initialise file browser with the last used start directory */ #define DEFAULT_USE_LAST_START_DIRECTORY false diff --git a/configuration.c b/configuration.c index fc547dfdb1..f5a1c9a6f5 100644 --- a/configuration.c +++ b/configuration.c @@ -1812,6 +1812,7 @@ static struct config_bool_setting *populate_settings_bool( SETTING_BOOL("remap_save_on_exit", &settings->bools.remap_save_on_exit, true, DEFAULT_REMAP_SAVE_ON_EXIT, false); SETTING_BOOL("show_hidden_files", &settings->bools.show_hidden_files, true, DEFAULT_SHOW_HIDDEN_FILES, false); SETTING_BOOL("use_last_start_directory", &settings->bools.use_last_start_directory, true, DEFAULT_USE_LAST_START_DIRECTORY, false); + SETTING_BOOL("core_suggest_always", &settings->bools.core_suggest_always, true, DEFAULT_CORE_SUGGEST_ALWAYS, false); SETTING_BOOL("camera_allow", &settings->bools.camera_allow, true, false, false); SETTING_BOOL("location_allow", &settings->bools.location_allow, true, false, false); SETTING_BOOL("cloud_sync_enable", &settings->bools.cloud_sync_enable, true, false, false); diff --git a/configuration.h b/configuration.h index 8cae2cbb1f..c1d8cd67ee 100644 --- a/configuration.h +++ b/configuration.h @@ -731,7 +731,6 @@ typedef struct settings bool frame_time_counter_reset_after_save_state; /* Menu */ - bool filter_by_current_core; bool menu_enable_widgets; bool menu_show_load_content_animation; bool notification_show_autoconfig; @@ -1037,8 +1036,11 @@ typedef struct settings bool sort_screenshots_by_content_enable; bool config_save_on_exit; bool remap_save_on_exit; + bool show_hidden_files; + bool filter_by_current_core; bool use_last_start_directory; + bool core_suggest_always; bool savefiles_in_content_dir; bool savestates_in_content_dir; diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index d61808dd11..c233e8cfe8 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -5002,6 +5002,14 @@ MSG_HASH( MENU_ENUM_SUBLABEL_USE_LAST_START_DIRECTORY, "Open File Browser at the last used location when loading content from the Start Directory. Note: Location will be reset to default upon restarting RetroArch." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CORE_SUGGEST_ALWAYS, + "Always Suggest Cores" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CORE_SUGGEST_ALWAYS, + "Suggest available cores even when a core is already loaded." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_USE_BUILTIN_PLAYER, "Use Built-In Media Player" diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 101f7f0ef3..74359f8ffe 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -1930,6 +1930,7 @@ static bool menu_content_find_first_core( menu_content_ctx_defer_info_t *def_info, bool load_content_with_current_core, char *s, size_t len) { + settings_t *settings = config_get_ptr(); const core_info_t *info = NULL; size_t supported = 0; core_info_list_t *core_info = (core_info_list_t*)def_info->data; @@ -1961,6 +1962,11 @@ static bool menu_content_find_first_core( def_info->s, &info, &supported); + /* Don't suggest cores if a core is already loaded. */ + if ( !path_is_empty(RARCH_PATH_CORE) + && !settings->bools.core_suggest_always) + load_content_with_current_core = true; + /* We started the menu with 'Load Content', we are * going to use the current core to load this. */ if (load_content_with_current_core) @@ -9691,8 +9697,7 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs, } else { - if ( string_is_equal(menu_label, msg_hash_to_str(MENU_ENUM_LABEL_FAVORITES)) - && path_is_empty(RARCH_PATH_CORE)) + if (string_is_equal(menu_label, msg_hash_to_str(MENU_ENUM_LABEL_FAVORITES))) BIND_ACTION_OK(cbs, action_ok_compressed_archive_push_detect_core); else BIND_ACTION_OK(cbs, action_ok_compressed_archive_push); diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 94193a84a4..dbac9f0523 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -1069,6 +1069,7 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_playlist_entry_remove, DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_system_directory, MENU_ENUM_SUBLABEL_SYSTEM_DIRECTORY) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_rgui_browser_directory, MENU_ENUM_SUBLABEL_RGUI_BROWSER_DIRECTORY) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_use_last_start_directory, MENU_ENUM_SUBLABEL_USE_LAST_START_DIRECTORY) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_suggest_always, MENU_ENUM_SUBLABEL_CORE_SUGGEST_ALWAYS) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_content_dir, MENU_ENUM_SUBLABEL_CONTENT_DIR) DEFAULT_SUBLABEL_MACRO(action_bind_dynamic_wallpapers_directory, MENU_ENUM_SUBLABEL_DYNAMIC_WALLPAPERS_DIRECTORY) DEFAULT_SUBLABEL_MACRO(action_bind_thumbnails_directory, MENU_ENUM_SUBLABEL_THUMBNAILS_DIRECTORY) @@ -4902,6 +4903,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_USE_LAST_START_DIRECTORY: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_use_last_start_directory); break; + case MENU_ENUM_LABEL_CORE_SUGGEST_ALWAYS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_suggest_always); + break; case MENU_ENUM_LABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_toggle_gamepad_combo); break; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 2cea74a3cc..d191f2a0c7 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -10147,6 +10147,7 @@ unsigned menu_displaylist_build_list( {MENU_ENUM_LABEL_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE, PARSE_ONLY_BOOL}, {MENU_ENUM_LABEL_FILTER_BY_CURRENT_CORE, PARSE_ONLY_BOOL}, {MENU_ENUM_LABEL_USE_LAST_START_DIRECTORY, PARSE_ONLY_BOOL}, + {MENU_ENUM_LABEL_CORE_SUGGEST_ALWAYS, PARSE_ONLY_BOOL}, {MENU_ENUM_LABEL_USE_BUILTIN_PLAYER, PARSE_ONLY_BOOL}, {MENU_ENUM_LABEL_USE_BUILTIN_IMAGE_VIEWER, PARSE_ONLY_BOOL}, }; diff --git a/menu/menu_setting.c b/menu/menu_setting.c index f3119835a0..462120b67a 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -20015,20 +20015,6 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_left = &setting_bool_action_left_with_refresh; (*list)[list_info->index - 1].action_right = &setting_bool_action_right_with_refresh; - CONFIG_BOOL( - list, list_info, - &settings->bools.use_last_start_directory, - MENU_ENUM_LABEL_USE_LAST_START_DIRECTORY, - MENU_ENUM_LABEL_VALUE_USE_LAST_START_DIRECTORY, - false, - 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); END_SUB_GROUP(list, list_info, parent_group); END_GROUP(list, list_info, parent_group); @@ -20057,6 +20043,51 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE); + CONFIG_BOOL( + list, list_info, + &settings->bools.filter_by_current_core, + MENU_ENUM_LABEL_FILTER_BY_CURRENT_CORE, + MENU_ENUM_LABEL_VALUE_FILTER_BY_CURRENT_CORE, + DEFAULT_FILTER_BY_CURRENT_CORE, + 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.use_last_start_directory, + MENU_ENUM_LABEL_USE_LAST_START_DIRECTORY, + MENU_ENUM_LABEL_VALUE_USE_LAST_START_DIRECTORY, + DEFAULT_USE_LAST_START_DIRECTORY, + 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.core_suggest_always, + MENU_ENUM_LABEL_CORE_SUGGEST_ALWAYS, + MENU_ENUM_LABEL_VALUE_CORE_SUGGEST_ALWAYS, + DEFAULT_CORE_SUGGEST_ALWAYS, + 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); + END_SUB_GROUP(list, list_info, parent_group); END_GROUP(list, list_info, parent_group); break; @@ -20101,21 +20132,6 @@ static bool setting_append_list( SD_FLAG_NONE); #endif - CONFIG_BOOL( - list, list_info, - &settings->bools.filter_by_current_core, - MENU_ENUM_LABEL_FILTER_BY_CURRENT_CORE, - MENU_ENUM_LABEL_VALUE_FILTER_BY_CURRENT_CORE, - DEFAULT_FILTER_BY_CURRENT_CORE, - 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); - END_SUB_GROUP(list, list_info, parent_group); END_GROUP(list, list_info, parent_group); break; diff --git a/msg_hash.h b/msg_hash.h index 7feac96f4a..7a8a3c7e2e 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -2583,6 +2583,7 @@ enum msg_hash_enums MENU_LABEL(CONFIRM_ON_EXIT), MENU_LABEL(SHOW_HIDDEN_FILES), MENU_LABEL(USE_LAST_START_DIRECTORY), + MENU_LABEL(CORE_SUGGEST_ALWAYS), /* Driver settings */ diff --git a/tasks/task_content.c b/tasks/task_content.c index 233654820b..ec315665cb 100644 --- a/tasks/task_content.c +++ b/tasks/task_content.c @@ -2470,7 +2470,6 @@ bool task_push_load_content_with_new_core_from_menu( path_set(RARCH_PATH_CONTENT, fullpath); path_set(RARCH_PATH_CORE, core_path); - path_clear(RARCH_PATH_CORE_LAST); #ifdef HAVE_DYNAMIC /* Load core */