diff --git a/include/QF/input/binding.h b/include/QF/input/binding.h index e901b47a2..a81f8a05c 100644 --- a/include/QF/input/binding.h +++ b/include/QF/input/binding.h @@ -351,7 +351,9 @@ void IN_ButtonAction (in_button_t *buttin, int id, int pressed); int IN_RegisterButton (in_button_t *button); int IN_RegisterAxis (in_axis_t *axis); in_button_t *IN_FindButton (const char *name); +void IN_ButtonClearStates (void); in_axis_t *IN_FindAxis (const char *name); +void IN_AxisClearStates (void); void IN_ButtonAddListener (in_button_t *button, button_listener_t listener, void *data); void IN_ButtonRemoveListener (in_button_t *button, button_listener_t listener, diff --git a/libs/input/in_axis.c b/libs/input/in_axis.c index 303cc75ea..0c250b4ce 100644 --- a/libs/input/in_axis.c +++ b/libs/input/in_axis.c @@ -75,6 +75,18 @@ IN_FindAxis (const char *name) return Hash_Find (axis_tab, name); } +static void +axis_clear_state (void *_a, void *data) +{ + //FIXME what to do here? +} + +void +IN_AxisClearStates (void) +{ + Hash_ForEach (axis_tab, axis_clear_state, 0); +} + void IN_AxisAddListener (in_axis_t *axis, axis_listener_t listener, void *data) { diff --git a/libs/input/in_button.c b/libs/input/in_button.c index 97e4339ad..4847783eb 100644 --- a/libs/input/in_button.c +++ b/libs/input/in_button.c @@ -227,6 +227,19 @@ IN_ButtonRemoveListener (in_button_t *button, button_listener_t listener, } } +static void +button_clear_state (void *_rb, void *data) +{ + regbutton_t *rb = _rb; + button_release_cmd (rb->button); +} + +void +IN_ButtonClearStates (void) +{ + Hash_ForEach (button_tab, button_clear_state, 0); +} + static void in_button_shutdown (void *data) { diff --git a/libs/input/in_common.c b/libs/input/in_common.c index 9d9920641..f4024c753 100644 --- a/libs/input/in_common.c +++ b/libs/input/in_common.c @@ -587,6 +587,8 @@ IN_ClearStates (void) rd->driver.clear_states (rd->data); } } + IN_AxisClearStates (); + IN_ButtonClearStates (); } #ifdef HAVE_EVDEV