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 };
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 */
void
@ -403,7 +390,7 @@ SDL_PumpEvents(void)
}
#if !SDL_JOYSTICK_DISABLED
/* Check for joystick state change */
if (SDL_ShouldPollJoystick()) {
if ((!SDL_disabled_events[SDL_JOYAXISMOTION >> 8] || SDL_JoystickEventState(SDL_QUERY))) {
SDL_JoystickUpdate();
}
#endif

View file

@ -736,18 +736,6 @@ SDL_JoystickEventState(int state)
#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 */
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,
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 */
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 */
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 */
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 *
JoystickByDevIndex(int device_index)
{

View file

@ -213,11 +213,6 @@ void SDL_SYS_JoystickDetect()
{
}
SDL_bool SDL_SYS_JoystickNeedsPolling()
{
return SDL_FALSE;
}
const char *
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 */
const char *
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 */
const char *
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 */
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 */
const char *
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 *
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 */
const char * SDL_SYS_JoystickNameForDeviceIndex(int device_index)
{

View file

@ -797,80 +797,71 @@ EnumXInputDevices(JoyStick_DeviceData **pContext)
void SDL_SYS_JoystickDetect()
{
JoyStick_DeviceData *pCurList = NULL;
#if !SDL_EVENTS_DISABLED
SDL_Event event;
#endif
/* only enum the devices if the joystick thread told us something changed */
if ( s_bDeviceAdded || s_bDeviceRemoved )
{
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 (!s_bDeviceAdded && !s_bDeviceRemoved) {
return; /* thread hasn't signaled, nothing to do right now. */
}
if ( pCurList )
{
while ( pCurList )
{
JoyStick_DeviceData *pListNext = NULL;
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);
while (pCurList) {
JoyStick_DeviceData *pListNext = NULL;
#if SDL_HAPTIC_DINPUT
if (pCurList->bXInputDevice) {
XInputHaptic_MaybeRemoveDevice(pCurList->XInputUserId);
} else {
DirectInputHaptic_MaybeRemoveDevice(&pCurList->dxdevice);
}
if (pCurList->bXInputDevice) {
XInputHaptic_MaybeRemoveDevice(pCurList->XInputUserId);
} else {
DirectInputHaptic_MaybeRemoveDevice(&pCurList->dxdevice);
}
#endif
#if !SDL_EVENTS_DISABLED
{
SDL_Event event;
event.type = SDL_JOYDEVICEREMOVED;
SDL_zero(event);
event.type = SDL_JOYDEVICEREMOVED;
if (SDL_GetEventState(event.type) == SDL_ENABLE) {
event.jdevice.which = pCurList->nInstanceID;
if ((SDL_EventOK == NULL)
|| (*SDL_EventOK) (SDL_EventOKParam, &event)) {
SDL_PushEvent(&event);
}
}
if (SDL_GetEventState(event.type) == SDL_ENABLE) {
event.jdevice.which = pCurList->nInstanceID;
if ((!SDL_EventOK) || (*SDL_EventOK) (SDL_EventOKParam, &event)) {
SDL_PushEvent(&event);
}
}
#endif /* !SDL_EVENTS_DISABLED */
pListNext = pCurList->pNext;
SDL_free(pCurList->joystickname);
SDL_free(pCurList);
pCurList = pListNext;
}
pListNext = pCurList->pNext;
SDL_free(pCurList->joystickname);
SDL_free(pCurList);
pCurList = pListNext;
}
if ( s_bDeviceAdded )
{
if (s_bDeviceAdded) {
JoyStick_DeviceData *pNewJoystick;
int device_index = 0;
s_bDeviceAdded = SDL_FALSE;
pNewJoystick = SYS_Joystick;
while ( pNewJoystick )
{
if ( pNewJoystick->send_add_event )
{
while (pNewJoystick) {
if (pNewJoystick->send_add_event) {
#if SDL_HAPTIC_DINPUT
if (pNewJoystick->bXInputDevice) {
XInputHaptic_MaybeAddDevice(pNewJoystick->XInputUserId);
@ -880,18 +871,15 @@ void SDL_SYS_JoystickDetect()
#endif
#if !SDL_EVENTS_DISABLED
{
SDL_Event event;
SDL_zero(event);
event.type = SDL_JOYDEVICEADDED;
if (SDL_GetEventState(event.type) == SDL_ENABLE) {
event.jdevice.which = device_index;
if ((SDL_EventOK == NULL)
|| (*SDL_EventOK) (SDL_EventOKParam, &event)) {
SDL_PushEvent(&event);
if ((!SDL_EventOK) || (*SDL_EventOK) (SDL_EventOKParam, &event)) {
SDL_PushEvent(&event);
}
}
}
#endif /* !SDL_EVENTS_DISABLED */
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 */
const char *
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 */
const char *
SDL_SYS_JoystickNameForDeviceIndex(int device_index)

View file

@ -230,14 +230,6 @@ void SDL_SYS_JoystickDetect()
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.
This function will return an SDL-standard value of 0 on success