Removed SDL_SYS_JoystickNeedsPolling().

It was simpler to just have the polling (actually: hotplug detection)
 functions return immediately if it's not an appropriate time to poll.

Note that previously, if any joystick/controller was opened, we would poll
 every time anyhow, skipping this function.
This commit is contained in:
Ryan C. Gordon 2014-06-14 23:31:23 -04:00
parent 9e5504f89d
commit 446d19c4de
15 changed files with 51 additions and 165 deletions

View file

@ -83,19 +83,6 @@ static struct
} SDL_EventQ = { NULL, SDL_TRUE }; } SDL_EventQ = { NULL, SDL_TRUE };
static SDL_INLINE SDL_bool
SDL_ShouldPollJoystick()
{
#if !SDL_JOYSTICK_DISABLED
if ((!SDL_disabled_events[SDL_JOYAXISMOTION >> 8] ||
SDL_JoystickEventState(SDL_QUERY)) &&
SDL_PrivateJoystickNeedsPolling()) {
return SDL_TRUE;
}
#endif
return SDL_FALSE;
}
/* Public functions */ /* Public functions */
void void
@ -403,7 +390,7 @@ SDL_PumpEvents(void)
} }
#if !SDL_JOYSTICK_DISABLED #if !SDL_JOYSTICK_DISABLED
/* Check for joystick state change */ /* Check for joystick state change */
if (SDL_ShouldPollJoystick()) { if ((!SDL_disabled_events[SDL_JOYAXISMOTION >> 8] || SDL_JoystickEventState(SDL_QUERY))) {
SDL_JoystickUpdate(); SDL_JoystickUpdate();
} }
#endif #endif

View file

@ -736,18 +736,6 @@ SDL_JoystickEventState(int state)
#endif /* SDL_EVENTS_DISABLED */ #endif /* SDL_EVENTS_DISABLED */
} }
/* return 1 if you want to run the joystick update loop this frame, used by hotplug support */
SDL_bool
SDL_PrivateJoystickNeedsPolling()
{
if (SDL_joysticks != NULL) {
return SDL_TRUE;
} else {
return SDL_SYS_JoystickNeedsPolling();
}
}
/* return the guid for this index */ /* return the guid for this index */
SDL_JoystickGUID SDL_JoystickGetDeviceGUID(int device_index) SDL_JoystickGUID SDL_JoystickGetDeviceGUID(int device_index)
{ {

View file

@ -42,9 +42,6 @@ extern int SDL_PrivateJoystickHat(SDL_Joystick * joystick,
extern int SDL_PrivateJoystickButton(SDL_Joystick * joystick, extern int SDL_PrivateJoystickButton(SDL_Joystick * joystick,
Uint8 button, Uint8 state); Uint8 button, Uint8 state);
/* Helper function to let lower sys layer tell the event system if the joystick code needs to think */
extern SDL_bool SDL_PrivateJoystickNeedsPolling();
/* Internal sanity checking functions */ /* Internal sanity checking functions */
extern int SDL_PrivateJoystickValid(SDL_Joystick * joystick); extern int SDL_PrivateJoystickValid(SDL_Joystick * joystick);

View file

@ -68,9 +68,6 @@ extern int SDL_SYS_NumJoysticks();
/* Function to cause any queued joystick insertions to be processed */ /* Function to cause any queued joystick insertions to be processed */
extern void SDL_SYS_JoystickDetect(); extern void SDL_SYS_JoystickDetect();
/* Function to determine if the joystick loop needs to run right now */
extern SDL_bool SDL_SYS_JoystickNeedsPolling();
/* Function to get the device-dependent name of a joystick */ /* Function to get the device-dependent name of a joystick */
extern const char *SDL_SYS_JoystickNameForDeviceIndex(int device_index); extern const char *SDL_SYS_JoystickNameForDeviceIndex(int device_index);

View file

@ -410,11 +410,6 @@ void SDL_SYS_JoystickDetect()
} }
} }
SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_TRUE;
}
static SDL_joylist_item * static SDL_joylist_item *
JoystickByDevIndex(int device_index) JoystickByDevIndex(int device_index)
{ {

View file

@ -213,11 +213,6 @@ void SDL_SYS_JoystickDetect()
{ {
} }
SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_FALSE;
}
const char * const char *
SDL_SYS_JoystickNameForDeviceIndex(int device_index) SDL_SYS_JoystickNameForDeviceIndex(int device_index)
{ {

View file

@ -601,15 +601,6 @@ SDL_SYS_JoystickDetect()
} }
} }
SDL_bool
SDL_SYS_JoystickNeedsPolling()
{
while (CFRunLoopRunInMode(SDL_JOYSTICK_RUNLOOP_MODE,0,TRUE) == kCFRunLoopRunHandledSource) {
/* no-op. Pending callbacks will fire in CFRunLoopRunInMode(). */
}
return s_bDeviceAdded || s_bDeviceRemoved;
}
/* Function to get the device-dependent name of a joystick */ /* Function to get the device-dependent name of a joystick */
const char * const char *
SDL_SYS_JoystickNameForDeviceIndex(int device_index) SDL_SYS_JoystickNameForDeviceIndex(int device_index)

View file

@ -46,11 +46,6 @@ void SDL_SYS_JoystickDetect()
{ {
} }
SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_FALSE;
}
/* Function to get the device-dependent name of a joystick */ /* Function to get the device-dependent name of a joystick */
const char * const char *
SDL_SYS_JoystickNameForDeviceIndex(int device_index) SDL_SYS_JoystickNameForDeviceIndex(int device_index)

View file

@ -94,11 +94,6 @@ extern "C"
{ {
} }
SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_FALSE;
}
/* Function to get the device-dependent name of a joystick */ /* Function to get the device-dependent name of a joystick */
const char *SDL_SYS_JoystickNameForDeviceIndex(int device_index) const char *SDL_SYS_JoystickNameForDeviceIndex(int device_index)
{ {

View file

@ -49,11 +49,6 @@ void SDL_SYS_JoystickDetect()
{ {
} }
SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_FALSE;
}
/* Function to get the device-dependent name of a joystick */ /* Function to get the device-dependent name of a joystick */
const char * const char *
SDL_SYS_JoystickNameForDeviceIndex(int device_index) SDL_SYS_JoystickNameForDeviceIndex(int device_index)

View file

@ -392,15 +392,6 @@ void SDL_SYS_JoystickDetect()
} }
SDL_bool SDL_SYS_JoystickNeedsPolling()
{
#if SDL_USE_LIBUDEV
return SDL_TRUE;
#endif
return SDL_FALSE;
}
static SDL_joylist_item * static SDL_joylist_item *
JoystickByDevIndex(int device_index) JoystickByDevIndex(int device_index)
{ {

View file

@ -141,11 +141,6 @@ void SDL_SYS_JoystickDetect()
{ {
} }
SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_FALSE;
}
/* Function to get the device-dependent name of a joystick */ /* Function to get the device-dependent name of a joystick */
const char * SDL_SYS_JoystickNameForDeviceIndex(int device_index) const char * SDL_SYS_JoystickNameForDeviceIndex(int device_index)
{ {

View file

@ -797,80 +797,71 @@ EnumXInputDevices(JoyStick_DeviceData **pContext)
void SDL_SYS_JoystickDetect() void SDL_SYS_JoystickDetect()
{ {
JoyStick_DeviceData *pCurList = NULL; JoyStick_DeviceData *pCurList = NULL;
#if !SDL_EVENTS_DISABLED
SDL_Event event;
#endif
/* only enum the devices if the joystick thread told us something changed */ /* only enum the devices if the joystick thread told us something changed */
if ( s_bDeviceAdded || s_bDeviceRemoved ) if (!s_bDeviceAdded && !s_bDeviceRemoved) {
{ return; /* thread hasn't signaled, nothing to do right now. */
SDL_LockMutex( s_mutexJoyStickEnum );
s_bDeviceAdded = SDL_FALSE;
s_bDeviceRemoved = SDL_FALSE;
pCurList = SYS_Joystick;
SYS_Joystick = NULL;
/* Look for DirectInput joysticks, wheels, head trackers, gamepads, etc.. */
IDirectInput8_EnumDevices(dinput,
DI8DEVCLASS_GAMECTRL,
EnumJoysticksCallback,
&pCurList, DIEDFL_ATTACHEDONLY);
SDL_free(SDL_RawDevList); /* in case we used this in DirectInput enumerator. */
SDL_RawDevList = NULL;
SDL_RawDevListCount = 0;
/* Look for XInput devices. Do this last, so they're first in the final list. */
EnumXInputDevices(&pCurList);
SDL_UnlockMutex( s_mutexJoyStickEnum );
} }
if ( pCurList ) SDL_LockMutex(s_mutexJoyStickEnum);
{
while ( pCurList ) s_bDeviceAdded = SDL_FALSE;
{ s_bDeviceRemoved = SDL_FALSE;
JoyStick_DeviceData *pListNext = NULL;
pCurList = SYS_Joystick;
SYS_Joystick = NULL;
/* Look for DirectInput joysticks, wheels, head trackers, gamepads, etc.. */
IDirectInput8_EnumDevices(dinput, DI8DEVCLASS_GAMECTRL, EnumJoysticksCallback, &pCurList, DIEDFL_ATTACHEDONLY);
SDL_free(SDL_RawDevList); /* in case we used this in DirectInput enumerator. */
SDL_RawDevList = NULL;
SDL_RawDevListCount = 0;
/* Look for XInput devices. Do this last, so they're first in the final list. */
EnumXInputDevices(&pCurList);
SDL_UnlockMutex(s_mutexJoyStickEnum);
while (pCurList) {
JoyStick_DeviceData *pListNext = NULL;
#if SDL_HAPTIC_DINPUT #if SDL_HAPTIC_DINPUT
if (pCurList->bXInputDevice) { if (pCurList->bXInputDevice) {
XInputHaptic_MaybeRemoveDevice(pCurList->XInputUserId); XInputHaptic_MaybeRemoveDevice(pCurList->XInputUserId);
} else { } else {
DirectInputHaptic_MaybeRemoveDevice(&pCurList->dxdevice); DirectInputHaptic_MaybeRemoveDevice(&pCurList->dxdevice);
} }
#endif #endif
#if !SDL_EVENTS_DISABLED #if !SDL_EVENTS_DISABLED
{ SDL_zero(event);
SDL_Event event; event.type = SDL_JOYDEVICEREMOVED;
event.type = SDL_JOYDEVICEREMOVED;
if (SDL_GetEventState(event.type) == SDL_ENABLE) { if (SDL_GetEventState(event.type) == SDL_ENABLE) {
event.jdevice.which = pCurList->nInstanceID; event.jdevice.which = pCurList->nInstanceID;
if ((SDL_EventOK == NULL) if ((!SDL_EventOK) || (*SDL_EventOK) (SDL_EventOKParam, &event)) {
|| (*SDL_EventOK) (SDL_EventOKParam, &event)) { SDL_PushEvent(&event);
SDL_PushEvent(&event);
}
}
} }
}
#endif /* !SDL_EVENTS_DISABLED */ #endif /* !SDL_EVENTS_DISABLED */
pListNext = pCurList->pNext; pListNext = pCurList->pNext;
SDL_free(pCurList->joystickname); SDL_free(pCurList->joystickname);
SDL_free(pCurList); SDL_free(pCurList);
pCurList = pListNext; pCurList = pListNext;
}
} }
if ( s_bDeviceAdded ) if (s_bDeviceAdded) {
{
JoyStick_DeviceData *pNewJoystick; JoyStick_DeviceData *pNewJoystick;
int device_index = 0; int device_index = 0;
s_bDeviceAdded = SDL_FALSE; s_bDeviceAdded = SDL_FALSE;
pNewJoystick = SYS_Joystick; pNewJoystick = SYS_Joystick;
while ( pNewJoystick ) while (pNewJoystick) {
{ if (pNewJoystick->send_add_event) {
if ( pNewJoystick->send_add_event )
{
#if SDL_HAPTIC_DINPUT #if SDL_HAPTIC_DINPUT
if (pNewJoystick->bXInputDevice) { if (pNewJoystick->bXInputDevice) {
XInputHaptic_MaybeAddDevice(pNewJoystick->XInputUserId); XInputHaptic_MaybeAddDevice(pNewJoystick->XInputUserId);
@ -880,18 +871,15 @@ void SDL_SYS_JoystickDetect()
#endif #endif
#if !SDL_EVENTS_DISABLED #if !SDL_EVENTS_DISABLED
{ SDL_zero(event);
SDL_Event event;
event.type = SDL_JOYDEVICEADDED; event.type = SDL_JOYDEVICEADDED;
if (SDL_GetEventState(event.type) == SDL_ENABLE) { if (SDL_GetEventState(event.type) == SDL_ENABLE) {
event.jdevice.which = device_index; event.jdevice.which = device_index;
if ((SDL_EventOK == NULL) if ((!SDL_EventOK) || (*SDL_EventOK) (SDL_EventOKParam, &event)) {
|| (*SDL_EventOK) (SDL_EventOKParam, &event)) { SDL_PushEvent(&event);
SDL_PushEvent(&event);
} }
} }
}
#endif /* !SDL_EVENTS_DISABLED */ #endif /* !SDL_EVENTS_DISABLED */
pNewJoystick->send_add_event = 0; pNewJoystick->send_add_event = 0;
} }
@ -901,16 +889,6 @@ void SDL_SYS_JoystickDetect()
} }
} }
/* we need to poll if we have pending hotplug device changes or connected devices */
SDL_bool SDL_SYS_JoystickNeedsPolling()
{
/* we have a new device or one was pulled, we need to think this frame please */
if ( s_bDeviceAdded || s_bDeviceRemoved )
return SDL_TRUE;
return SDL_FALSE;
}
/* Function to get the device-dependent name of a joystick */ /* Function to get the device-dependent name of a joystick */
const char * const char *
SDL_SYS_JoystickNameForDeviceIndex(int device_index) SDL_SYS_JoystickNameForDeviceIndex(int device_index)

View file

@ -193,11 +193,6 @@ void SDL_SYS_JoystickDetect()
{ {
} }
SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_FALSE;
}
/* Function to get the device-dependent name of a joystick */ /* Function to get the device-dependent name of a joystick */
const char * const char *
SDL_SYS_JoystickNameForDeviceIndex(int device_index) SDL_SYS_JoystickNameForDeviceIndex(int device_index)

View file

@ -230,14 +230,6 @@ void SDL_SYS_JoystickDetect()
SDL_UnlockMutex(g_DeviceInfoLock); SDL_UnlockMutex(g_DeviceInfoLock);
} }
SDL_bool SDL_SYS_JoystickNeedsPolling()
{
/* Since XInput, or WinRT, provides any events to indicate when a game
controller gets connected, and instead indicates device availability
solely through polling, we'll poll (for new devices).
*/
return SDL_TRUE;
}
/* Internal function to retreive device capabilities. /* Internal function to retreive device capabilities.
This function will return an SDL-standard value of 0 on success This function will return an SDL-standard value of 0 on success