diff --git a/input/input_driver.c b/input/input_driver.c index 408c3fdcfa..888c952a71 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -124,7 +124,7 @@ void *current_input_data = NULL; static bool input_driver_block_hotkey = false; static bool input_driver_block_libretro_input = false; static bool input_driver_nonblock_state = false; -static bool input_driver_flushing_input = false; +bool input_driver_flushing_input = false; static bool input_driver_data_own = false; static float input_driver_axis_threshold = 0.0f; static unsigned input_driver_max_users = 0; @@ -806,20 +806,7 @@ uint64_t input_menu_keys_pressed( } } - *last_input = ret; - - if (input_driver_flushing_input) - { - input_driver_flushing_input = false; - if (ret) - { - ret = 0; - if (runloop_paused) - BIT64_SET(ret, RARCH_PAUSE_TOGGLE); - input_driver_flushing_input = true; - } - } - + *last_input = ret; *nonblock_state = input_driver_nonblock_state; return ret; @@ -967,20 +954,7 @@ uint64_t input_keys_pressed( ret |= (UINT64_C(1) << i); } - *last_input = ret; - - if (input_driver_flushing_input) - { - input_driver_flushing_input = false; - if (ret) - { - ret = 0; - if (runloop_paused) - BIT64_SET(ret, RARCH_PAUSE_TOGGLE); - input_driver_flushing_input = true; - } - } - + *last_input = ret; *nonblock_state = input_driver_nonblock_state; return ret; diff --git a/retroarch.c b/retroarch.c index e1e5c2e8db..7725370715 100644 --- a/retroarch.c +++ b/retroarch.c @@ -241,6 +241,8 @@ static bool runloop_autosave = false; static retro_time_t frame_limit_minimum_time = 0.0; static retro_time_t frame_limit_last_time = 0.0; +extern bool input_driver_flushing_input; + static void retroarch_msg_queue_deinit(void) { if (!runloop_msg_queue) @@ -2890,6 +2892,18 @@ int runloop_iterate(unsigned *sleep_ms) runloop_paused, &input_driver_is_nonblock); + if (input_driver_flushing_input) + { + input_driver_flushing_input = false; + if (current_input) + { + current_input = 0; + if (runloop_paused) + BIT64_SET(current_input, RARCH_PAUSE_TOGGLE); + input_driver_flushing_input = true; + } + } + if (runloop_frame_time.callback) { /* Updates frame timing if frame timing callback is in use by the core.