diff --git a/config.def.h b/config.def.h index 625ae215fa..abf79e73fd 100644 --- a/config.def.h +++ b/config.def.h @@ -625,6 +625,7 @@ static bool back_as_menu_toggle_enable = true; #endif static bool all_users_control_menu = false; +static bool menu_swap_ok_cancel_buttons = false; /* Crop overscanned frames. */ static const bool crop_overscan = true; diff --git a/configuration.c b/configuration.c index ec05a6d9ca..009d6e2cf1 100644 --- a/configuration.c +++ b/configuration.c @@ -520,19 +520,6 @@ const char *config_get_default_menu(void) return "null"; } -static unsigned config_menu_btn_ok_default(void) -{ - if (g_defaults.menu.controls.set) - return g_defaults.menu.controls.menu_btn_ok; - return default_menu_btn_ok; -} - -static unsigned config_menu_btn_cancel_default(void) -{ - if (g_defaults.menu.controls.set) - return g_defaults.menu.controls.menu_btn_cancel; - return default_menu_btn_cancel; -} #endif bool config_overlay_enable_default(void) @@ -712,6 +699,7 @@ static int populate_settings_bool(settings_t *settings, struct config_bool_setti SETTING_BOOL("input_remap_binds_enable", &settings->input.remap_binds_enable, true, true, false); SETTING_BOOL("back_as_menu_toggle_enable", &settings->input.back_as_menu_toggle_enable, true, true, false); SETTING_BOOL("all_users_control_menu", &settings->input.all_users_control_menu, true, all_users_control_menu, false); + SETTING_BOOL("menu_swap_ok_cancel_buttons", &settings->input.menu_swap_ok_cancel_buttons, true, menu_swap_ok_cancel_buttons, false); #ifdef HAVE_NETWORKING SETTING_BOOL("netplay_client_swap_input", &settings->netplay.swap_input, true, netplay_client_swap_input, false); #endif @@ -895,12 +883,7 @@ static int populate_settings_int(settings_t *settings, struct config_int_setting SETTING_INT("keyboard_gamepad_mapping_type",&settings->input.keyboard_gamepad_mapping_type, true, 1, false); SETTING_INT("input_poll_type_behavior", &settings->input.poll_type_behavior, true, 2, false); #ifdef HAVE_MENU - SETTING_INT("menu_ok_btn", &settings->menu_ok_btn, true, config_menu_btn_ok_default(), false); - SETTING_INT("menu_cancel_btn", &settings->menu_cancel_btn, true, config_menu_btn_cancel_default(), false); - SETTING_INT("menu_search_btn", &settings->menu_search_btn, true, default_menu_btn_search, false); - SETTING_INT("menu_info_btn", &settings->menu_info_btn, true, default_menu_btn_info, false); - SETTING_INT("menu_default_btn", &settings->menu_default_btn, true, default_menu_btn_default, false); - SETTING_INT("menu_scroll_down_btn", &settings->menu_scroll_down_btn, true, default_menu_btn_scroll_down, false); + #endif SETTING_INT("video_monitor_index", &settings->video.monitor_index, true, monitor_index, false); SETTING_INT("video_fullscreen_x", &settings->video.fullscreen_x, true, fullscreen_x, false); @@ -911,7 +894,6 @@ static int populate_settings_int(settings_t *settings, struct config_int_setting #ifdef HAVE_NETWORKGAMEPAD SETTING_INT("network_remote_base_port", &settings->network_remote_base_port, true, network_remote_base_port, false); #endif - SETTING_INT("menu_scroll_up_btn", &settings->menu_scroll_up_btn, true, default_menu_btn_scroll_up, false); #ifdef HAVE_GEKKO SETTING_INT("video_viwidth", &settings->video.viwidth, true, video_viwidth, false); #endif diff --git a/configuration.h b/configuration.h index d58cb0547f..6d03dedc22 100644 --- a/configuration.h +++ b/configuration.h @@ -296,6 +296,8 @@ typedef struct settings unsigned menu_toggle_gamepad_combo; bool back_as_menu_toggle_enable; bool all_users_control_menu; + + bool menu_swap_ok_cancel_buttons; #if defined(VITA) bool backtouch_enable; bool backtouch_toggle; @@ -454,14 +456,6 @@ typedef struct settings bool sort_savefiles_enable; bool sort_savestates_enable; - unsigned menu_ok_btn; - unsigned menu_cancel_btn; - unsigned menu_search_btn; - unsigned menu_default_btn; - unsigned menu_info_btn; - unsigned menu_scroll_down_btn; - unsigned menu_scroll_up_btn; - char username[32]; #ifdef HAVE_LANGEXTRA unsigned int user_language; diff --git a/input/input_driver.c b/input/input_driver.c index d236bc33d6..6b0fdc7802 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -817,26 +817,35 @@ uint64_t input_menu_keys_pressed(void) if (menu_input_dialog_get_display_kb()) return ret; - if (current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_RETURN)) - BIT64_SET(ret, settings->menu_ok_btn); + { + if (!settings->input.menu_swap_ok_cancel_buttons) + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_A); + else + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_B); + } if (current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_BACKSPACE)) - BIT64_SET(ret, settings->menu_cancel_btn); + { + if (!settings->input.menu_swap_ok_cancel_buttons) + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_B); + else + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_A); + } if (current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_SPACE)) - BIT64_SET(ret, settings->menu_default_btn); + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_START); if (current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_SLASH)) - BIT64_SET(ret, settings->menu_search_btn); + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_X); if (current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_RSHIFT)) - BIT64_SET(ret, settings->menu_info_btn); + BIT64_SET(ret, RETRO_DEVICE_ID_JOYPAD_SELECT); if (current_input->input_state(current_input_data, binds, 0, RETRO_DEVICE_KEYBOARD, 0, RETROK_RIGHT)) diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 1ccf0ebbce..6012342fdc 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -408,6 +408,8 @@ MSG_HASH(MENU_ENUM_LABEL_INFO_SCREEN, "info_screen") MSG_HASH(MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU, "all_users_control_menu") +MSG_HASH(MENU_ENUM_LABEL_MENU_INPUT_SWAP_OK_CANCEL, + "menu_swap_ok_cancel") MSG_HASH(MENU_ENUM_LABEL_INPUT_AUTODETECT_ENABLE, "input_autodetect_enable") MSG_HASH(MENU_ENUM_LABEL_INPUT_AXIS_THRESHOLD, diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index e2331c03ef..367eee2caf 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -612,6 +612,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AUTODETECT_ENABLE, "Autoconfig Enable") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD, "Analog Stick Deadzone") +MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_INPUT_SWAP_OK_CANCEL, + "Menu Swap Ok & Cancel Buttons") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BACK_AS_MENU_ENUM_TOGGLE_ENABLE, "Back As Menu Toggle Enable") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_BIND_ALL, diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index c4b0984e26..e6aec4b04a 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -5317,6 +5317,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) #endif ret = menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO, PARSE_ONLY_UINT, false); + ret = menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_MENU_INPUT_SWAP_OK_CANCEL, PARSE_ONLY_BOOL, false); ret = menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU, PARSE_ONLY_BOOL, false); ret = menu_displaylist_parse_settings_enum(menu, info, diff --git a/menu/menu_event.c b/menu/menu_event.c index 3150189b12..168cea11ba 100644 --- a/menu/menu_event.c +++ b/menu/menu_event.c @@ -347,6 +347,10 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input) trigger_input = 0; } + unsigned menu_ok_btn = settings->input.menu_swap_ok_cancel_buttons ? + RETRO_DEVICE_ID_JOYPAD_A: RETRO_DEVICE_ID_JOYPAD_B; + unsigned menu_cancel_btn = settings->input.menu_swap_ok_cancel_buttons ? + RETRO_DEVICE_ID_JOYPAD_B: RETRO_DEVICE_ID_JOYPAD_A; if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_UP)) ret = MENU_ACTION_UP; @@ -356,21 +360,21 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input) ret = MENU_ACTION_LEFT; else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_RIGHT)) ret = MENU_ACTION_RIGHT; - else if (trigger_input & (UINT64_C(1) << settings->menu_scroll_up_btn)) + else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L)) ret = MENU_ACTION_SCROLL_UP; - else if (trigger_input & (UINT64_C(1) << settings->menu_scroll_down_btn)) + else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R)) ret = MENU_ACTION_SCROLL_DOWN; - else if (trigger_input & (UINT64_C(1) << settings->menu_cancel_btn)) + else if (trigger_input & (UINT64_C(1) << menu_ok_btn)) ret = MENU_ACTION_CANCEL; - else if (trigger_input & (UINT64_C(1) << settings->menu_ok_btn)) + else if (trigger_input & (UINT64_C(1) << menu_cancel_btn)) ret = MENU_ACTION_OK; - else if (trigger_input & (UINT64_C(1) << settings->menu_search_btn)) + else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_X)) ret = MENU_ACTION_SEARCH; else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_Y)) ret = MENU_ACTION_SCAN; - else if (trigger_input & (UINT64_C(1) << settings->menu_default_btn)) + else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_START)) ret = MENU_ACTION_START; - else if (trigger_input & (UINT64_C(1) << settings->menu_info_btn)) + else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_SELECT)) ret = MENU_ACTION_INFO; else if (trigger_input & (UINT64_C(1) << RARCH_MENU_TOGGLE)) ret = MENU_ACTION_TOGGLE; diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 06906c21cb..9b0e53ce38 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -3997,6 +3997,22 @@ static bool setting_append_list( general_read_handler); menu_settings_list_current_add_range(list, list_info, 0, 3, 1, true, true); + CONFIG_BOOL( + list, list_info, + &settings->input.menu_swap_ok_cancel_buttons, + MENU_ENUM_LABEL_MENU_INPUT_SWAP_OK_CANCEL, + MENU_ENUM_LABEL_VALUE_MENU_INPUT_SWAP_OK_CANCEL, + menu_swap_ok_cancel_buttons, + 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->input.all_users_control_menu, diff --git a/msg_hash.h b/msg_hash.h index d54dd29768..c594c1fb57 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -454,6 +454,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_INPUT_MAX_USERS, MENU_ENUM_LABEL_INPUT_REMAP_BINDS_ENABLE, MENU_ENUM_LABEL_INPUT_AXIS_THRESHOLD, + MENU_ENUM_LABEL_MENU_INPUT_SWAP_OK_CANCEL, MENU_ENUM_LABEL_INPUT_SMALL_KEYBOARD_ENABLE, MENU_ENUM_LABEL_INPUT_TOUCH_ENABLE, MENU_ENUM_LABEL_INPUT_PREFER_FRONT_TOUCH, @@ -563,6 +564,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS, MENU_ENUM_LABEL_VALUE_INPUT_REMAP_BINDS_ENABLE, MENU_ENUM_LABEL_VALUE_INPUT_AXIS_THRESHOLD, + MENU_ENUM_LABEL_VALUE_MENU_INPUT_SWAP_OK_CANCEL, MENU_ENUM_LABEL_VALUE_INPUT_BIND_TIMEOUT, MENU_ENUM_LABEL_VALUE_INPUT_TURBO_PERIOD, MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE,