From eaab6098eb268e57ff8ff6ccc50dcc0656df9514 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 21 Sep 2017 10:29:17 -0700 Subject: [PATCH] Only apply the jitter filter to prevent unexpected motion on axes that haven't been touched. --- src/joystick/SDL_joystick.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c index f7485d343..bfce1faf2 100644 --- a/src/joystick/SDL_joystick.c +++ b/src/joystick/SDL_joystick.c @@ -661,7 +661,6 @@ int SDL_PrivateJoystickAxis(SDL_Joystick * joystick, Uint8 axis, Sint16 value) { int posted; - const int MAX_ALLOWED_JITTER = SDL_JOYSTICK_AXIS_MAX / 80; /* ShanWan PS3 controller needed 96 */ /* Make sure we're not getting garbage or duplicate events */ if (axis >= joystick->naxes) { @@ -673,10 +672,12 @@ SDL_PrivateJoystickAxis(SDL_Joystick * joystick, Uint8 axis, Sint16 value) joystick->axes[axis].zero = value; joystick->axes[axis].has_initial_value = SDL_TRUE; } - if (SDL_abs(value - joystick->axes[axis].value) <= MAX_ALLOWED_JITTER) { - return 0; - } if (!joystick->axes[axis].sent_initial_value) { + /* Make sure we don't send motion until there's real activity on this axis */ + const int MAX_ALLOWED_JITTER = SDL_JOYSTICK_AXIS_MAX / 80; /* ShanWan PS3 controller needed 96 */ + if (SDL_abs(value - joystick->axes[axis].value) <= MAX_ALLOWED_JITTER) { + return 0; + } joystick->axes[axis].sent_initial_value = SDL_TRUE; joystick->axes[axis].value = value; /* Just so we pass the check above */ SDL_PrivateJoystickAxis(joystick, axis, joystick->axes[axis].initial_value);