Skip to content

Commit

Permalink
You shouldn't get axis and hat events when your application doesn't h…
Browse files Browse the repository at this point in the history
…ave focus (unless you use the SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS hint)
  • Loading branch information
slouken committed Jun 22, 2014
1 parent f8b75b1 commit 7b7828a
Showing 1 changed file with 21 additions and 13 deletions.
34 changes: 21 additions & 13 deletions src/joystick/SDL_joystick.c
Expand Up @@ -502,21 +502,22 @@ SDL_PrivateJoystickAxis(SDL_Joystick * joystick, Uint8 axis, Sint16 value)
return 0;
}

/* Update internal joystick state */
if (value == joystick->axes[axis]) {
return 0;
}
joystick->axes[axis] = value;

/* We ignore events if we don't have keyboard focus, except for centering
* events.
*/
if (SDL_PrivateJoystickShouldIgnoreEvent()) {
if (!(joystick->closed && joystick->uncentered)) {
if ((value > 0 && value >= joystick->axes[axis]) ||
(value < 0 && value <= joystick->axes[axis])) {
return 0;
}
}

/* Update internal joystick state */
if (value == joystick->axes[axis]) {
return 0;
}
joystick->axes[axis] = value;

/* Post the event, if desired */
posted = 0;
#if !SDL_EVENTS_DISABLED
Expand All @@ -542,18 +543,20 @@ SDL_PrivateJoystickHat(SDL_Joystick * joystick, Uint8 hat, Uint8 value)
return 0;
}

/* Update internal joystick state */
joystick->hats[hat] = value;

/* We ignore events if we don't have keyboard focus, except for centering
* events.
*/
if (SDL_PrivateJoystickShouldIgnoreEvent()) {
if (!(joystick->closed && joystick->uncentered)) {
if (value != SDL_HAT_CENTERED) {
return 0;
}
}

/* Update internal joystick state */
if (value == joystick->hats[hat]) {
return 0;
}
joystick->hats[hat] = value;

/* Post the event, if desired */
posted = 0;
Expand Down Expand Up @@ -633,11 +636,16 @@ SDL_PrivateJoystickButton(SDL_Joystick * joystick, Uint8 button, Uint8 state)

/* We ignore events if we don't have keyboard focus, except for button
* release. */
if (state == SDL_PRESSED && SDL_PrivateJoystickShouldIgnoreEvent()) {
return 0;
if (SDL_PrivateJoystickShouldIgnoreEvent()) {
if (state == SDL_PRESSED) {
return 0;
}
}

/* Update internal joystick state */
if (state == joystick->buttons[button]) {
return 0;
}
joystick->buttons[button] = state;

/* Post the event, if desired */
Expand Down

0 comments on commit 7b7828a

Please sign in to comment.