SDL: Disable Xbox axis deadzone handling by default

From 85961b61a187bd77540804105112f79f5faab8dc Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sun, 16 Jan 2022 09:01:56 -0800
Subject: [PATCH] Disable Xbox axis deadzone handling by default

Fixes https://github.com/libsdl-org/SDL/issues/5227
---
 src/joystick/hidapi/SDL_hidapi_xboxone.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/joystick/hidapi/SDL_hidapi_xboxone.c b/src/joystick/hidapi/SDL_hidapi_xboxone.c
index e325c9fca9f..a98d7d99741 100644
--- a/src/joystick/hidapi/SDL_hidapi_xboxone.c
+++ b/src/joystick/hidapi/SDL_hidapi_xboxone.c
@@ -40,6 +40,12 @@
 /* Define this if you want to log all packets from the controller */
 /*#define DEBUG_XBOX_PROTOCOL*/
 
+/* Define this if you want deadzone filtering done at this level.
+ * This introduces several issues, so this is disabled by default:
+ * https://github.com/libsdl-org/SDL/issues/5227
+ */
+/* #define ENABLE_AXIS_FILTERING */
+
 #define CONTROLLER_NEGOTIATION_TIMEOUT_MS   300
 #define CONTROLLER_PREPARE_INPUT_TIMEOUT_MS 50
 
@@ -480,25 +486,31 @@ HIDAPI_DriverXboxOne_SetJoystickSensorsEnabled(SDL_HIDAPI_Device *device, SDL_Jo
 
 static Sint16 FilterLeftThumb(Sint16 axis)
 {
+#ifdef ENABLE_AXIS_FILTERING
     if (axis <= XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE && axis >= -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE) {
         return 0;
     }
+#endif
     return axis;
 }
 
 static Sint16 FilterRightThumb(Sint16 axis)
 {
+#ifdef ENABLE_AXIS_FILTERING
     if (axis <= XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE && axis >= -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE) {
         return 0;
     }
+#endif
     return axis;
 }
 
 static Sint16 FilterTrigger(Sint16 axis)
 {
+#ifdef ENABLE_AXIS_FILTERING
     if (axis <= XINPUT_GAMEPAD_TRIGGER_THRESHOLD) {
         return SDL_MIN_SINT16;
     }
+#endif
     return axis;
 }