diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 083331bc17..f56fe26f0b 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -191,6 +191,11 @@ static int deferred_push_options(menu_displaylist_info_t *info) return menu_displaylist_push_list(info, DISPLAYLIST_OPTIONS); } +static int deferred_push_content_settings(menu_displaylist_info_t *info) +{ + return menu_displaylist_push_list(info, DISPLAYLIST_CONTENT_SETTINGS); +} + static int deferred_push_load_content_list(menu_displaylist_info_t *info) { return menu_displaylist_push_list(info, DISPLAYLIST_LOAD_CONTENT_LIST); @@ -500,6 +505,9 @@ static int menu_cbs_init_bind_deferred_push_compare_label(menu_file_list_cbs_t * case MENU_LABEL_OPTIONS: cbs->action_deferred_push = deferred_push_options; break; + case MENU_LABEL_CONTENT_SETTINGS: + cbs->action_deferred_push = deferred_push_content_settings; + break; case MENU_LABEL_LOAD_CONTENT_LIST: cbs->action_deferred_push = deferred_push_load_content_list; break; diff --git a/menu/cbs/menu_cbs_get_value.c b/menu/cbs/menu_cbs_get_value.c index c569de42a8..1670f3626b 100644 --- a/menu/cbs/menu_cbs_get_value.c +++ b/menu/cbs/menu_cbs_get_value.c @@ -490,6 +490,24 @@ static void menu_action_setting_disp_set_label_menu_more( strlcpy(s2, path, len2); } +static void menu_action_setting_disp_set_label_state( + file_list_t* list, + unsigned *w, unsigned type, unsigned i, + const char *label, + char *s, size_t len, + const char *entry_label, + const char *path, + char *s2, size_t len2) +{ + settings_t *settings = config_get_ptr(); + + strlcpy(s2, path, len2); + *w = 16; + snprintf(s, len, "%d", settings->state_slot); + if (settings->state_slot == -1) + strlcat(s, " (Auto)", len); +} + static void menu_action_setting_disp_set_label_menu_disk_index( file_list_t* list, @@ -808,6 +826,11 @@ static int menu_cbs_init_bind_get_string_representation_compare_label( { switch (label_hash) { + case MENU_LABEL_SAVE_STATE: + case MENU_LABEL_LOAD_STATE: + cbs->action_get_value = + menu_action_setting_disp_set_label_state; + break; case MENU_LABEL_CHEAT_NUM_PASSES: cbs->action_get_value = menu_action_setting_disp_set_label_cheat_num_passes; @@ -860,6 +883,9 @@ static int menu_cbs_init_bind_get_string_representation_compare_label( case MENU_LABEL_CORE_COUNTERS: case MENU_LABEL_DATABASE_MANAGER_LIST: case MENU_LABEL_CURSOR_MANAGER_LIST: + case MENU_LABEL_RESTART_CONTENT: + case MENU_LABEL_RESUME_CONTENT: + case MENU_LABEL_TAKE_SCREENSHOT: cbs->action_get_value = menu_action_setting_disp_set_label_menu_more; break; diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 252065e6d0..c58874bfdc 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -1553,6 +1553,7 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, case MENU_LABEL_MANAGEMENT: case MENU_LABEL_OPTIONS: case MENU_LABEL_LOAD_CONTENT_LIST: + case MENU_LABEL_CONTENT_SETTINGS: cbs->action_ok = action_ok_push_default; break; case MENU_LABEL_LOAD_CONTENT: diff --git a/menu/cbs/menu_cbs_title.c b/menu/cbs/menu_cbs_title.c index 9c791d0f0f..6d7675e8b5 100644 --- a/menu/cbs/menu_cbs_title.c +++ b/menu/cbs/menu_cbs_title.c @@ -681,6 +681,7 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, case MENU_LABEL_CURSOR_MANAGER_LIST: case MENU_LABEL_DEFERRED_CORE_UPDATER_LIST: case MENU_LABEL_LOAD_CONTENT_LIST: + case MENU_LABEL_CONTENT_SETTINGS: cbs->action_get_title = action_get_title_action_generic; break; case MENU_LABEL_DISK_IMAGE_APPEND: diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index a77341835d..a67d226a65 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -1430,10 +1430,52 @@ static int menu_displaylist_parse_horizontal_list(menu_displaylist_info_t *info) return 0; } +static int menu_displaylist_parse_load_content_settings(menu_displaylist_info_t *info) +{ + menu_handle_t *menu = menu_driver_get_ptr(); + global_t *global = global_get_ptr(); + if (!menu) + return -1; + + if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY)) + { + menu_list_push(info->list, + menu_hash_to_str(MENU_LABEL_VALUE_RESUME_CONTENT), + menu_hash_to_str(MENU_LABEL_RESUME_CONTENT), + MENU_SETTING_ACTION_RUN, 0, 0); + + menu_list_push(info->list, + menu_hash_to_str(MENU_LABEL_VALUE_RESTART_CONTENT), + menu_hash_to_str(MENU_LABEL_RESTART_CONTENT), + MENU_SETTING_ACTION_RUN, 0, 0); + + menu_list_push(info->list, + menu_hash_to_str(MENU_LABEL_VALUE_TAKE_SCREENSHOT), + menu_hash_to_str(MENU_LABEL_TAKE_SCREENSHOT), + MENU_SETTING_ACTION_SCREENSHOT, 0, 0); + + menu_list_push(info->list, + menu_hash_to_str(MENU_LABEL_VALUE_SAVE_STATE), + menu_hash_to_str(MENU_LABEL_SAVE_STATE), + MENU_SETTING_ACTION_SAVESTATE, 0, 0); + + menu_list_push(info->list, + menu_hash_to_str(MENU_LABEL_VALUE_LOAD_STATE), + menu_hash_to_str(MENU_LABEL_LOAD_STATE), + MENU_SETTING_ACTION_LOADSTATE, 0, 0); + } + else + menu_list_push(info->list, + menu_hash_to_str(MENU_LABEL_VALUE_NO_ITEMS), + "", 0, 0, 0); + + return 0; +} + static int menu_displaylist_parse_load_core_list(menu_displaylist_info_t *info) { global_t *global = global_get_ptr(); - settings_t *settings = config_get_ptr(); + settings_t *settings = config_get_ptr(); menu_list_push(info->list, menu_hash_to_str(MENU_LABEL_VALUE_LOAD_CONTENT), @@ -1505,55 +1547,6 @@ static int menu_displaylist_parse_options(menu_displaylist_info_t *info) return 0; } -static int menu_displaylist_parse_horizontal_content_actions(menu_displaylist_info_t *info) -{ - menu_handle_t *menu = menu_driver_get_ptr(); - global_t *global = global_get_ptr(); - if (!menu) - return -1; - - if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY) && - !strcmp(menu->deferred_path, global->fullpath)) - { - menu_list_push(info->list, - menu_hash_to_str(MENU_LABEL_RESUME_CONTENT), - "file_load_or_resume", - MENU_SETTING_ACTION_RUN, 0, 0); - menu_list_push(info->list, - menu_hash_to_str(MENU_LABEL_VALUE_SAVE_STATE), - menu_hash_to_str(MENU_LABEL_SAVE_STATE), - MENU_SETTING_ACTION_SAVESTATE, 0, 0); - menu_list_push(info->list, - menu_hash_to_str(MENU_LABEL_VALUE_LOAD_STATE), - menu_hash_to_str(MENU_LABEL_LOAD_STATE), - MENU_SETTING_ACTION_LOADSTATE, 0, 0); - menu_list_push(info->list, - menu_hash_to_str(MENU_LABEL_VALUE_CORE_INFORMATION), - menu_hash_to_str(MENU_LABEL_CORE_INFORMATION), - MENU_SETTING_ACTION_CORE_INFORMATION, 0, 0); - menu_list_push(info->list, - menu_hash_to_str(MENU_LABEL_VALUE_OPTIONS), - menu_hash_to_str(MENU_LABEL_OPTIONS), - MENU_SETTING_ACTION_CORE_OPTIONS, 0, 0); - menu_list_push(info->list, - menu_hash_to_str(MENU_LABEL_VALUE_TAKE_SCREENSHOT), - menu_hash_to_str(MENU_LABEL_TAKE_SCREENSHOT), - MENU_SETTING_ACTION_SCREENSHOT, 0, 0); - menu_list_push(info->list, - menu_hash_to_str(MENU_LABEL_VALUE_RESTART_CONTENT), - menu_hash_to_str(MENU_LABEL_RESTART_CONTENT), - MENU_SETTING_ACTION_RESET, 0, 0); - } - else - menu_list_push(info->list, - menu_hash_to_str(MENU_LABEL_VALUE_RUN), - "file_load_or_resume", - MENU_SETTING_ACTION_RUN, - 0, 0); - - return 0; -} - static int menu_displaylist_parse_options_cheats(menu_displaylist_info_t *info) { unsigned i; @@ -1902,6 +1895,14 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type) ret = menu_displaylist_parse_horizontal_list(info); need_sort = true; + need_refresh = true; + need_push = true; + break; + case DISPLAYLIST_HORIZONTAL_CONTENT_ACTIONS: + case DISPLAYLIST_CONTENT_SETTINGS: + menu_list_clear(info->list); + ret = menu_displaylist_parse_load_content_settings(info); + need_refresh = true; need_push = true; break; @@ -1915,12 +1916,6 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type) menu_list_clear(info->list); ret = menu_displaylist_parse_options(info); - need_push = true; - break; - case DISPLAYLIST_HORIZONTAL_CONTENT_ACTIONS: - menu_list_clear(info->list); - ret = menu_displaylist_parse_horizontal_content_actions(info); - need_refresh = true; need_push = true; break; case DISPLAYLIST_OPTIONS_CHEATS: diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h index 499f31722d..af02e11cd5 100644 --- a/menu/menu_displaylist.h +++ b/menu/menu_displaylist.h @@ -73,6 +73,7 @@ enum DISPLAYLIST_SHADER_PARAMETERS_PRESET, DISPLAYLIST_SYSTEM_INFO, DISPLAYLIST_LOAD_CONTENT_LIST, + DISPLAYLIST_CONTENT_SETTINGS, DISPLAYLIST_OPTIONS, DISPLAYLIST_OPTIONS_CHEATS, DISPLAYLIST_OPTIONS_REMAPPINGS, diff --git a/menu/menu_hash.c b/menu/menu_hash.c index 380c4e5736..5dbff0d386 100644 --- a/menu/menu_hash.c +++ b/menu/menu_hash.c @@ -1572,6 +1572,10 @@ static const char *menu_hash_to_str_english(uint32_t hash) { switch (hash) { + case MENU_LABEL_CONTENT_SETTINGS: + return "content_settings"; + case MENU_LABEL_VALUE_CONTENT_SETTINGS: + return "Content Settings"; case MENU_LABEL_VALUE_RDB_ENTRY_CRC32: return "CRC32"; case MENU_LABEL_VALUE_RDB_ENTRY_MD5: diff --git a/menu/menu_hash.h b/menu/menu_hash.h index 2040e798d7..48c3693701 100644 --- a/menu/menu_hash.h +++ b/menu/menu_hash.h @@ -35,6 +35,9 @@ extern "C" { #define MENU_VALUE_OPEN_ARCHIVE 0x96da22b9U #define MENU_VALUE_ASK_ARCHIVE 0x0b87d6a4U +#define MENU_LABEL_CONTENT_SETTINGS 0xf31dcaf0U +#define MENU_LABEL_VALUE_CONTENT_SETTINGS 0x399ea371U + #define MENU_LABEL_LOAD_CONTENT_LIST 0x5745de1fU #define MENU_LABEL_VALUE_LOAD_CONTENT_LIST 0x55ff08eaU @@ -102,10 +105,10 @@ extern "C" { #define MENU_LABEL_VALUE_NO_CORE_INFORMATION_AVAILABLE 0x2a11fe80U #define MENU_LABEL_VALUE_NO_CORES_AVAILABLE 0xe16bfd0dU #define MENU_LABEL_VALUE_NO_PLAYLIST_ENTRIES_AVAILABLE 0xea82695dU -#define MENU_LABEL_SAVE_STATE 0x54a257f4U +#define MENU_LABEL_SAVE_STATE 0x3a4849b5U #define MENU_LABEL_VALUE_LOAD_STATE 0xd23ba706U #define MENU_LABEL_VALUE_SAVE_STATE 0x3e182415U -#define MENU_LABEL_LOAD_STATE 0xe8c5dae5U +#define MENU_LABEL_LOAD_STATE 0xa39eb286U #define MENU_LABEL_REWIND 0x1931d5aeU #define MENU_LABEL_NETPLAY_FLIP_PLAYERS 0x801425abU #define MENU_LABEL_CHEAT_INDEX_MINUS 0x57f58b6cU diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 58e4adf35e..c35491b2ff 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -605,19 +605,6 @@ void setting_get_string_representation(void *data, char *s, size_t len) * * Returns: 0 on success, -1 on error. **/ -static int setting_action_start_savestates(void *data) -{ - rarch_setting_t *setting = (rarch_setting_t*)data; - settings_t *settings = config_get_ptr(); - - if (!setting) - return -1; - - settings->state_slot = 0; - - return 0; -} - static int setting_action_start_bind_device(void *data) { rarch_setting_t *setting = (rarch_setting_t*)data; @@ -907,36 +894,6 @@ static int setting_action_right_libretro_device_type( return 0; } -static int setting_action_left_savestates( - void *data, bool wraparound) -{ - rarch_setting_t *setting = (rarch_setting_t*)data; - settings_t *settings = config_get_ptr(); - - if (!setting) - return -1; - - /* Slot -1 is (auto) slot. */ - if (settings->state_slot >= 0) - settings->state_slot--; - - return 0; -} - -static int setting_action_right_savestates( - void *data, bool wraparound) -{ - rarch_setting_t *setting = (rarch_setting_t*)data; - settings_t *settings = config_get_ptr(); - - if (!setting) - return -1; - - settings->state_slot++; - - return 0; -} - static int setting_action_left_bind_device(void *data, bool wraparound) { unsigned *p = NULL; @@ -1179,17 +1136,6 @@ static int setting_action_ok_bind_defaults(void *data, bool wraparound) return 0; } -static int setting_bool_action_ok_exit(void *data, bool wraparound) -{ - if (setting_generic_action_ok_default(data, wraparound) != 0) - return -1; - - event_command(EVENT_CMD_RESUME); - - return 0; -} - - static int setting_action_ok_video_refresh_rate_auto(void *data, bool wraparound) { double video_refresh_rate = 0.0; @@ -3074,16 +3020,6 @@ static void get_string_representation_bind_device(void * data, char *s, } -static void get_string_representation_savestate(void * data, char *s, - size_t len) -{ - settings_t *settings = config_get_ptr(); - - snprintf(s, len, "%d", settings->state_slot); - if (settings->state_slot == -1) - strlcat(s, " (Auto)", len); -} - /** * setting_get_label: * @list : File list on which to perform the search @@ -3535,6 +3471,13 @@ static bool setting_append_list_main_menu_options( parent_group); settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + CONFIG_ACTION( + menu_hash_to_str(MENU_LABEL_CONTENT_SETTINGS), + menu_hash_to_str(MENU_LABEL_VALUE_CONTENT_SETTINGS), + group_info.name, + subgroup_info.name, + parent_group); + CONFIG_ACTION( menu_hash_to_str(MENU_LABEL_OPTIONS), menu_hash_to_str(MENU_LABEL_VALUE_OPTIONS), @@ -3579,64 +3522,6 @@ static bool setting_append_list_main_menu_options( settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); } - if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY)) - { - CONFIG_ACTION( - menu_hash_to_str(MENU_LABEL_SAVE_STATE), - menu_hash_to_str(MENU_LABEL_VALUE_SAVE_STATE), - group_info.name, - subgroup_info.name, - menu_hash_to_str(MENU_VALUE_NOT_AVAILABLE)); - (*list)[list_info->index - 1].action_left = &setting_action_left_savestates; - (*list)[list_info->index - 1].action_right = &setting_action_right_savestates; - (*list)[list_info->index - 1].action_start = &setting_action_start_savestates; - (*list)[list_info->index - 1].action_ok = &setting_bool_action_ok_exit; - (*list)[list_info->index - 1].action_select = &setting_bool_action_ok_exit; - (*list)[list_info->index - 1].get_string_representation = &get_string_representation_savestate; - menu_settings_list_current_add_cmd (list, list_info, EVENT_CMD_SAVE_STATE); - - CONFIG_ACTION( - menu_hash_to_str(MENU_LABEL_LOAD_STATE), - menu_hash_to_str(MENU_LABEL_VALUE_LOAD_STATE), - group_info.name, - subgroup_info.name, - menu_hash_to_str(MENU_VALUE_NOT_AVAILABLE)); - (*list)[list_info->index - 1].action_left = &setting_action_left_savestates; - (*list)[list_info->index - 1].action_right = &setting_action_left_savestates; - (*list)[list_info->index - 1].action_start = &setting_action_start_savestates; - (*list)[list_info->index - 1].action_ok = &setting_bool_action_ok_exit; - (*list)[list_info->index - 1].action_select = &setting_bool_action_ok_exit; - (*list)[list_info->index - 1].get_string_representation = &get_string_representation_savestate; - menu_settings_list_current_add_cmd (list, list_info, EVENT_CMD_LOAD_STATE); - - CONFIG_ACTION( - menu_hash_to_str(MENU_LABEL_TAKE_SCREENSHOT), - menu_hash_to_str(MENU_LABEL_VALUE_TAKE_SCREENSHOT), - group_info.name, - subgroup_info.name, - parent_group); - menu_settings_list_current_add_cmd (list, list_info, EVENT_CMD_TAKE_SCREENSHOT); - - CONFIG_ACTION( - menu_hash_to_str(MENU_LABEL_RESUME_CONTENT), - menu_hash_to_str(MENU_LABEL_VALUE_RESUME_CONTENT), - group_info.name, - subgroup_info.name, - parent_group); - menu_settings_list_current_add_cmd (list, list_info, EVENT_CMD_RESUME); - (*list)[list_info->index - 1].action_ok = &setting_bool_action_ok_exit; - (*list)[list_info->index - 1].action_select = &setting_bool_action_ok_exit; - - CONFIG_ACTION( - menu_hash_to_str(MENU_LABEL_RESTART_CONTENT), - menu_hash_to_str(MENU_LABEL_VALUE_RESTART_CONTENT), - group_info.name, - subgroup_info.name, - parent_group); - menu_settings_list_current_add_cmd(list, list_info, EVENT_CMD_RESET); - (*list)[list_info->index - 1].action_ok = - (*list)[list_info->index - 1].action_select = &setting_bool_action_ok_exit; - } #ifndef HAVE_DYNAMIC CONFIG_ACTION( menu_hash_to_str(MENU_LABEL_RESTART_RETROARCH),