From 7681929cb46ba63a085e1e96f807437602128c9a Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 9 Nov 2021 12:30:37 -0800 Subject: [PATCH] Don't send the initial joystick axis event if the application is in the background --- src/joystick/SDL_joystick.c | 8 +++++--- src/joystick/SDL_sysjoystick.h | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c index 9bc123c39..4b41435ed 100644 --- a/src/joystick/SDL_joystick.c +++ b/src/joystick/SDL_joystick.c @@ -1344,7 +1344,7 @@ SDL_PrivateJoystickAxis(SDL_Joystick *joystick, Uint8 axis, Sint16 value) info->value = value; info->zero = value; info->has_initial_value = SDL_TRUE; - } else if (value == info->value) { + } else if (value == info->value && !info->sending_initial_value) { return 0; } else { info->has_second_value = SDL_TRUE; @@ -1356,15 +1356,17 @@ SDL_PrivateJoystickAxis(SDL_Joystick *joystick, Uint8 axis, Sint16 value) return 0; } info->sent_initial_value = SDL_TRUE; - info->value = ~value; /* Just so we pass the check above */ + info->sending_initial_value = SDL_TRUE; SDL_PrivateJoystickAxis(joystick, axis, info->initial_value); + info->sending_initial_value = SDL_FALSE; } /* We ignore events if we don't have keyboard focus, except for centering * events. */ if (SDL_PrivateJoystickShouldIgnoreEvent()) { - if ((value > info->zero && value >= info->value) || + if (info->sending_initial_value || + (value > info->zero && value >= info->value) || (value < info->zero && value <= info->value)) { return 0; } diff --git a/src/joystick/SDL_sysjoystick.h b/src/joystick/SDL_sysjoystick.h index 91c9a7c6c..79ba1786d 100644 --- a/src/joystick/SDL_sysjoystick.h +++ b/src/joystick/SDL_sysjoystick.h @@ -36,6 +36,7 @@ typedef struct _SDL_JoystickAxisInfo SDL_bool has_initial_value; /* Whether we've seen a value on the axis yet */ SDL_bool has_second_value; /* Whether we've seen a second value on the axis yet */ SDL_bool sent_initial_value; /* Whether we've sent the initial axis value */ + SDL_bool sending_initial_value; /* Whether we are sending the initial axis value */ } SDL_JoystickAxisInfo; typedef struct _SDL_JoystickTouchpadFingerInfo