Merge pull request #10801 from snackycakes/hotkey_block_delay

Added a hotkey delay option to fix issue #9080
This commit is contained in:
Autechre 2020-06-07 01:25:28 +02:00 committed by GitHub
commit 50e522c9ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 32 additions and 7 deletions

View File

@ -1075,6 +1075,8 @@ static const unsigned input_bind_timeout = 5;
static const unsigned input_bind_hold = 2;
static const unsigned input_hotkey_block_delay = 5;
static const unsigned gfx_thumbnails_default = 3;
static const unsigned menu_left_thumbnails_default = 0;

View File

@ -1758,6 +1758,7 @@ static struct config_uint_setting *populate_settings_uint(
SETTING_UINT("input_max_users", input_driver_get_uint(INPUT_ACTION_MAX_USERS), true, input_max_users, false);
SETTING_UINT("fps_update_interval", &settings->uints.fps_update_interval, true, DEFAULT_FPS_UPDATE_INTERVAL, false);
SETTING_UINT("input_menu_toggle_gamepad_combo", &settings->uints.input_menu_toggle_gamepad_combo, true, menu_toggle_gamepad_combo, false);
SETTING_UINT("input_hotkey_block_delay", &settings->uints.input_hotkey_block_delay, true, input_hotkey_block_delay, false);
#ifdef GEKKO
SETTING_UINT("input_mouse_scale", &settings->uints.input_mouse_scale, true, DEFAULT_MOUSE_SCALE, false);
#endif

View File

@ -492,6 +492,7 @@ typedef struct settings
#ifdef GEKKO
unsigned input_mouse_scale;
#endif
unsigned input_hotkey_block_delay;
unsigned input_menu_toggle_gamepad_combo;
unsigned input_keyboard_gamepad_mapping_type;
unsigned input_poll_type_behavior;

View File

@ -2062,6 +2062,7 @@ struct rarch_state
unsigned osk_last_codepoint_len;
unsigned input_driver_flushing_input;
unsigned input_driver_max_users;
unsigned input_hotkey_block_counter;
#ifdef HAVE_ACCESSIBILITY
unsigned gamepad_input_override;
#endif
@ -23186,6 +23187,7 @@ static void input_menu_keys_pressed(
unsigned i, port;
settings_t *settings = p_rarch->configuration_settings;
bool input_all_users_control_menu = settings->bools.input_all_users_control_menu;
int input_hotkey_block_delay = settings->uints.input_hotkey_block_delay;
uint8_t max_users = (uint8_t)p_rarch->input_driver_max_users;
uint8_t port_max = input_all_users_control_menu
? max_users : 1;
@ -23220,11 +23222,17 @@ static void input_menu_keys_pressed(
&binds[0], port, RETRO_DEVICE_JOYPAD, 0,
RARCH_ENABLE_HOTKEY))
{
p_rarch->input_driver_block_libretro_input = true;
break;
if (p_rarch->input_hotkey_block_counter < input_hotkey_block_delay)
p_rarch->input_hotkey_block_counter++;
else
{
p_rarch->input_driver_block_libretro_input = true;
break;
}
}
else
{
p_rarch->input_hotkey_block_counter = 0;
p_rarch->input_driver_block_hotkey = true;
break;
}
@ -23328,6 +23336,7 @@ static void input_keys_pressed(
{
unsigned i, port = 0;
settings_t *settings = p_rarch->configuration_settings;
int input_hotkey_block_delay = settings->uints.input_hotkey_block_delay;
const struct retro_keybind *binds = input_config_binds[0];
const struct retro_keybind *binds_norm = &input_config_binds[port][RARCH_ENABLE_HOTKEY];
const struct retro_keybind *binds_auto = &input_autoconf_binds[port][RARCH_ENABLE_HOTKEY];
@ -23342,13 +23351,21 @@ static void input_keys_pressed(
&input_config_binds[port][RARCH_ENABLE_HOTKEY];
if ( enable_hotkey && enable_hotkey->valid
&& p_rarch->current_input->input_state(
p_rarch->current_input_data, joypad_info,
&binds, port,
RETRO_DEVICE_JOYPAD, 0, RARCH_ENABLE_HOTKEY))
p_rarch->input_driver_block_libretro_input = true;
&& p_rarch->current_input->input_state(
p_rarch->current_input_data, joypad_info,
&binds, port,
RETRO_DEVICE_JOYPAD, 0, RARCH_ENABLE_HOTKEY))
{
if (p_rarch->input_hotkey_block_counter < input_hotkey_block_delay)
p_rarch->input_hotkey_block_counter++;
else
p_rarch->input_driver_block_libretro_input = true;
}
else
{
p_rarch->input_hotkey_block_counter = 0;
p_rarch->input_driver_block_hotkey = true;
}
}
if (binds[RARCH_GAME_FOCUS_TOGGLE].valid)

View File

@ -606,6 +606,10 @@
# Alternatively, all hotkeys for keyboard could be disabled by the user.
# input_enable_hotkey_btn =
# Adds a delay in frames before the assigned hotkey blocks input. Useful if the the
# hotkey input is mapped to another action.
# input_hotkey_block_delay = "5"
# Increases audio volume.
# input_volume_up = kp_plus
# Decreases audio volume.