Skip to content

Commit

Permalink
Add option to disable analog stick menu navigation
Browse files Browse the repository at this point in the history
Two new settings added to Settings / Input / Menu Control:
- disable left analog stick in menu navigation
- disable right analog stick in menu navigation

Since the corresponding logic is already a distinct logic flow in
input driver, no change was necessary to analog-to-digital settings
or the like.
  • Loading branch information
zoltanvb committed Jun 29, 2024
1 parent 57c7906 commit 590db4d
Show file tree
Hide file tree
Showing 9 changed files with 84 additions and 9 deletions.
2 changes: 2 additions & 0 deletions configuration.c
Original file line number Diff line number Diff line change
Expand Up @@ -1899,6 +1899,8 @@ static struct config_bool_setting *populate_settings_bool(
SETTING_BOOL("menu_unified_controls", &settings->bools.menu_unified_controls, true, false, false);
SETTING_BOOL("menu_disable_info_button", &settings->bools.menu_disable_info_button, true, false, false);
SETTING_BOOL("menu_disable_search_button", &settings->bools.menu_disable_search_button, true, false, false);
SETTING_BOOL("menu_disable_left_analog", &settings->bools.menu_disable_left_analog, true, false, false);
SETTING_BOOL("menu_disable_right_analog", &settings->bools.menu_disable_right_analog, true, false, false);
SETTING_BOOL("menu_linear_filter", &settings->bools.menu_linear_filter, true, DEFAULT_VIDEO_SMOOTH, false);
SETTING_BOOL("menu_horizontal_animation", &settings->bools.menu_horizontal_animation, true, DEFAULT_MENU_HORIZONTAL_ANIMATION, false);
SETTING_BOOL("menu_pause_libretro", &settings->bools.menu_pause_libretro, true, true, false);
Expand Down
2 changes: 2 additions & 0 deletions configuration.h
Original file line number Diff line number Diff line change
Expand Up @@ -821,6 +821,8 @@ typedef struct settings
bool menu_unified_controls;
bool menu_disable_info_button;
bool menu_disable_search_button;
bool menu_disable_left_analog;
bool menu_disable_right_analog;
bool menu_ticker_smooth;
bool settings_show_drivers;
bool settings_show_video;
Expand Down
5 changes: 4 additions & 1 deletion input/input_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -6786,14 +6786,17 @@ void input_driver_collect_system_input(input_driver_state_t *input_st,
(general_binds)[k].orig_joyaxis = (general_binds)[k].joyaxis;
}

/* Read input from both analog sticks. */
/* Read input from analog sticks according to settings. */
for (s = RETRO_DEVICE_INDEX_ANALOG_LEFT; s <= RETRO_DEVICE_INDEX_ANALOG_RIGHT; s++)
{
unsigned x_plus = RARCH_ANALOG_LEFT_X_PLUS;
unsigned y_plus = RARCH_ANALOG_LEFT_Y_PLUS;
unsigned x_minus = RARCH_ANALOG_LEFT_X_MINUS;
unsigned y_minus = RARCH_ANALOG_LEFT_Y_MINUS;

if ((settings->bools.menu_disable_left_analog && s == RETRO_DEVICE_INDEX_ANALOG_LEFT ) ||
(settings->bools.menu_disable_right_analog && s == RETRO_DEVICE_INDEX_ANALOG_RIGHT))
continue;
if (s == RETRO_DEVICE_INDEX_ANALOG_RIGHT)
{
x_plus = RARCH_ANALOG_RIGHT_X_PLUS;
Expand Down
8 changes: 8 additions & 0 deletions intl/msg_hash_lbl.h
Original file line number Diff line number Diff line change
Expand Up @@ -5010,6 +5010,14 @@ MSG_HASH(
MENU_ENUM_LABEL_INPUT_DISABLE_SEARCH_BUTTON,
"disable_search_button"
)
MSG_HASH(
MENU_ENUM_LABEL_INPUT_DISABLE_LEFT_ANALOG_IN_MENU,
"disable_left_analog_in_menu"
)
MSG_HASH(
MENU_ENUM_LABEL_INPUT_DISABLE_RIGHT_ANALOG_IN_MENU,
"disable_right_analog_in_menu"
)
MSG_HASH(
MENU_ENUM_LABEL_QUIT_PRESS_TWICE,
"quit_press_twice"
Expand Down
16 changes: 16 additions & 0 deletions intl/msg_hash_us.h
Original file line number Diff line number Diff line change
Expand Up @@ -3655,6 +3655,22 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_INPUT_DISABLE_SEARCH_BUTTON,
"If enabled Search button presses will be ignored."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_INPUT_DISABLE_LEFT_ANALOG_IN_MENU,
"Disable Left Analog in Menu"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_INPUT_DISABLE_LEFT_ANALOG_IN_MENU,
"Prevent Left Analog stick from navigating in menu."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_INPUT_DISABLE_RIGHT_ANALOG_IN_MENU,
"Disable Right Analog in Menu"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_INPUT_DISABLE_RIGHT_ANALOG_IN_MENU,
"Prevent Right Analog stick from navigating in menu."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_MENU_INPUT_SWAP_OK_CANCEL,
"Menu Swap OK and Cancel Buttons"
Expand Down
8 changes: 8 additions & 0 deletions menu/cbs/menu_cbs_sublabel.c
Original file line number Diff line number Diff line change
Expand Up @@ -599,6 +599,8 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_content_favorites_size, MENU_
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_input_unified_controls, MENU_ENUM_SUBLABEL_INPUT_UNIFIED_MENU_CONTROLS)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_input_disable_info_button, MENU_ENUM_SUBLABEL_INPUT_DISABLE_INFO_BUTTON)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_input_disable_search_button, MENU_ENUM_SUBLABEL_INPUT_DISABLE_SEARCH_BUTTON)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_input_disable_left_analog_in_menu, MENU_ENUM_SUBLABEL_INPUT_DISABLE_LEFT_ANALOG_IN_MENU)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_input_disable_right_analog_in_menu, MENU_ENUM_SUBLABEL_INPUT_DISABLE_RIGHT_ANALOG_IN_MENU)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quit_press_twice, MENU_ENUM_SUBLABEL_QUIT_PRESS_TWICE)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_onscreen_notifications_enable, MENU_ENUM_SUBLABEL_VIDEO_FONT_ENABLE)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_crop_overscan, MENU_ENUM_SUBLABEL_VIDEO_CROP_OVERSCAN)
Expand Down Expand Up @@ -4506,6 +4508,12 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_INPUT_DISABLE_SEARCH_BUTTON:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_input_disable_search_button);
break;
case MENU_ENUM_LABEL_INPUT_DISABLE_LEFT_ANALOG_IN_MENU:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_input_disable_left_analog_in_menu);
break;
case MENU_ENUM_LABEL_INPUT_DISABLE_RIGHT_ANALOG_IN_MENU:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_input_disable_right_analog_in_menu);
break;
case MENU_ENUM_LABEL_QUIT_PRESS_TWICE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_quit_press_twice);
break;
Expand Down
18 changes: 10 additions & 8 deletions menu/menu_displaylist.c
Original file line number Diff line number Diff line change
Expand Up @@ -7923,14 +7923,16 @@ unsigned menu_displaylist_build_list(
case DISPLAYLIST_INPUT_MENU_SETTINGS_LIST:
{
menu_displaylist_build_info_selective_t build_list[] = {
{MENU_ENUM_LABEL_INPUT_UNIFIED_MENU_CONTROLS, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_INPUT_SWAP_OK_CANCEL, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_INPUT_SWAP_SCROLL, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_SCROLL_FAST, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_SCROLL_DELAY, PARSE_ONLY_UINT, true },
{MENU_ENUM_LABEL_INPUT_DISABLE_INFO_BUTTON, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_INPUT_DISABLE_SEARCH_BUTTON, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_INPUT_UNIFIED_MENU_CONTROLS, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_INPUT_SWAP_OK_CANCEL, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_INPUT_SWAP_SCROLL, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_SCROLL_FAST, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_SCROLL_DELAY, PARSE_ONLY_UINT, true },
{MENU_ENUM_LABEL_INPUT_DISABLE_INFO_BUTTON, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_INPUT_DISABLE_SEARCH_BUTTON, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_INPUT_DISABLE_LEFT_ANALOG_IN_MENU, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_INPUT_DISABLE_RIGHT_ANALOG_IN_MENU, PARSE_ONLY_BOOL, true },
};

for (i = 0; i < ARRAY_SIZE(build_list); i++)
Expand Down
32 changes: 32 additions & 0 deletions menu/menu_setting.c
Original file line number Diff line number Diff line change
Expand Up @@ -15132,6 +15132,38 @@ static bool setting_append_list(
SD_FLAG_ADVANCED
);

CONFIG_BOOL(
list, list_info,
&settings->bools.menu_disable_left_analog,
MENU_ENUM_LABEL_INPUT_DISABLE_LEFT_ANALOG_IN_MENU,
MENU_ENUM_LABEL_VALUE_INPUT_DISABLE_LEFT_ANALOG_IN_MENU,
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_ADVANCED
);

CONFIG_BOOL(
list, list_info,
&settings->bools.menu_disable_right_analog,
MENU_ENUM_LABEL_INPUT_DISABLE_RIGHT_ANALOG_IN_MENU,
MENU_ENUM_LABEL_VALUE_INPUT_DISABLE_RIGHT_ANALOG_IN_MENU,
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_ADVANCED
);

CONFIG_BOOL(
list, list_info,
&settings->bools.quit_press_twice,
Expand Down
2 changes: 2 additions & 0 deletions msg_hash.h
Original file line number Diff line number Diff line change
Expand Up @@ -1352,6 +1352,8 @@ enum msg_hash_enums
MENU_LABEL(INPUT_UNIFIED_MENU_CONTROLS),
MENU_LABEL(INPUT_DISABLE_INFO_BUTTON),
MENU_LABEL(INPUT_DISABLE_SEARCH_BUTTON),
MENU_LABEL(INPUT_DISABLE_LEFT_ANALOG_IN_MENU),
MENU_LABEL(INPUT_DISABLE_RIGHT_ANALOG_IN_MENU),
MENU_LABEL(INPUT_RUMBLE_GAIN),

MENU_LABEL(QUIT_PRESS_TWICE),
Expand Down

0 comments on commit 590db4d

Please sign in to comment.