diff --git a/menu/menu_input.c b/menu/menu_input.c index cfa3868a1c..37859f7492 100644 --- a/menu/menu_input.c +++ b/menu/menu_input.c @@ -367,16 +367,15 @@ static bool menu_input_custom_bind_keyboard_cb(void *data, unsigned code) return (menu->binds.begin <= menu->binds.last); } -int menu_input_set_keyboard_bind_mode(void *data, +static int menu_input_set_bind_mode_common(rarch_setting_t *setting, enum menu_input_bind_mode type) { struct retro_keybind *keybind = NULL; - rarch_setting_t *setting = (rarch_setting_t*)data; settings_t *settings = config_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr(); menu_navigation_t *nav = menu_navigation_get_ptr(); - if (!menu || !setting) + if (!setting) return -1; switch (type) @@ -410,10 +409,14 @@ int menu_input_set_keyboard_bind_mode(void *data, nav->selection_ptr); break; } + return 0; +} +static int menu_input_set_timeout(void) +{ + menu_handle_t *menu = menu_driver_get_ptr(); - menu->binds.timeout_end = - rarch_get_time_usec() + + menu->binds.timeout_end = rarch_get_time_usec() + MENU_KEYBOARD_BIND_TIMEOUT_SECONDS * 1000000; input_keyboard_wait_keys(menu, menu_input_custom_bind_keyboard_cb); @@ -421,49 +424,29 @@ int menu_input_set_keyboard_bind_mode(void *data, return 0; } +int menu_input_set_keyboard_bind_mode(void *data, + enum menu_input_bind_mode type) +{ + rarch_setting_t *setting = (rarch_setting_t*)data; + + if (!setting) + return -1; + if (menu_input_set_bind_mode_common(setting, type) == -1) + return -1; + + return menu_input_set_timeout(); +} + int menu_input_set_input_device_bind_mode(void *data, enum menu_input_bind_mode type) { - struct retro_keybind *keybind = NULL; - rarch_setting_t *setting = (rarch_setting_t*)data; - settings_t *settings = config_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr(); - menu_navigation_t *nav = menu_navigation_get_ptr(); + rarch_setting_t *setting = (rarch_setting_t*)data; - if (!menu || !setting) + if (!setting) + return -1; + if (menu_input_set_bind_mode_common(setting, type) == -1) return -1; - - switch (type) - { - case MENU_INPUT_BIND_NONE: - return -1; - case MENU_INPUT_BIND_SINGLE: - keybind = (struct retro_keybind*)setting->value.keybind; - - if (!keybind) - return -1; - menu->binds.begin = setting->bind_type; - menu->binds.last = setting->bind_type; - menu->binds.target = keybind; - menu->binds.user = setting->index_offset; - menu_list_push( menu->menu_list->menu_stack, - "", - "custom_bind", - MENU_SETTINGS_CUSTOM_BIND, - nav->selection_ptr); - break; - case MENU_INPUT_BIND_ALL: - menu->binds.target = &settings->input.binds - [setting->index_offset][0]; - menu->binds.begin = MENU_SETTINGS_BIND_BEGIN; - menu->binds.last = MENU_SETTINGS_BIND_LAST; - menu_list_push( menu->menu_list->menu_stack, - "", - "custom_bind_all", - MENU_SETTINGS_CUSTOM_BIND, - nav->selection_ptr); - break; - } menu_input_poll_bind_get_rested_axes(&menu->binds); menu_input_poll_bind_state(&menu->binds);