Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Only check for keyboard focus if the video subsystem was initialized.
Browse files Browse the repository at this point in the history
Check the hint at initialization time, as an optimization.  This isn't something we expect the application to change at runtime, and if it is we should add an API for it.
  • Loading branch information
slouken committed Jun 29, 2013
1 parent 6c54896 commit 88b5726
Showing 1 changed file with 21 additions and 7 deletions.
28 changes: 21 additions & 7 deletions src/joystick/SDL_joystick.c
Expand Up @@ -22,6 +22,7 @@

/* This is the joystick API for Simple DirectMedia Layer */

#include "SDL.h"
#include "SDL_events.h"
#include "SDL_sysjoystick.h"
#include "SDL_assert.h"
Expand All @@ -31,17 +32,25 @@
#include "../events/SDL_events_c.h"
#endif

static SDL_bool SDL_joystick_allows_background_events = SDL_FALSE;
static SDL_Joystick *SDL_joysticks = NULL;
static SDL_Joystick *SDL_updating_joystick = NULL;

int
SDL_JoystickInit(void)
{
const char *hint;
int status;

/* Check to see if we should allow joystick events while in the background */
hint = SDL_GetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS);
if (hint && *hint == '1') {
SDL_joystick_allows_background_events = SDL_TRUE;
}

status = SDL_SYS_JoystickInit();
if (status >= 0) {
status = 0;
status = 0;
}
return (status);
}
Expand Down Expand Up @@ -455,17 +464,22 @@ SDL_JoystickQuit(void)
static SDL_bool
SDL_PrivateJoystickShouldIgnoreEvent()
{
const char *hint;
if (SDL_GetKeyboardFocus() != NULL) {
if (SDL_joystick_allows_background_events)
{
return SDL_FALSE;
}

hint = SDL_GetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS);
if (hint && *hint == '1') {
return SDL_FALSE;
if (SDL_WasInit(SDL_INIT_VIDEO)) {
if (SDL_GetKeyboardFocus() == NULL) {
// Video is initialized and we don't have focus, ignore the event.
return SDL_TRUE;
} else {
return SDL_FALSE;
}
}

return SDL_TRUE;
// Video subsystem wasn't initialized, always allow the event
return SDL_FALSE;
}

/* These are global for SDL_sysjoystick.c and SDL_events.c */
Expand Down

0 comments on commit 88b5726

Please sign in to comment.