Browse Source

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.
Ryan C. Gordon 11 years ago
parent
commit
446d19c4de

+ 1 - 14
src/events/SDL_events.c

@@ -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

+ 0 - 12
src/joystick/SDL_joystick.c

@@ -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)
 {

+ 0 - 3
src/joystick/SDL_joystick_c.h

@@ -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);
 

+ 0 - 3
src/joystick/SDL_sysjoystick.h

@@ -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);
 

+ 0 - 5
src/joystick/android/SDL_sysjoystick.c

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

+ 0 - 5
src/joystick/bsd/SDL_sysjoystick.c

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

+ 0 - 9
src/joystick/darwin/SDL_sysjoystick.c

@@ -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)

+ 0 - 5
src/joystick/dummy/SDL_sysjoystick.c

@@ -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)

+ 0 - 5
src/joystick/haiku/SDL_haikujoystick.cc

@@ -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)
     {

+ 0 - 5
src/joystick/iphoneos/SDL_sysjoystick.m

@@ -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)

+ 0 - 9
src/joystick/linux/SDL_sysjoystick.c

@@ -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)
 {

+ 0 - 5
src/joystick/psp/SDL_sysjoystick.c

@@ -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)
 {

+ 45 - 67
src/joystick/windows/SDL_dxjoystick.c

@@ -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 );
+    if (!s_bDeviceAdded && !s_bDeviceRemoved) {
+        return;  /* thread hasn't signaled, nothing to do right now. */
+    }
 
-        s_bDeviceAdded = SDL_FALSE;
-        s_bDeviceRemoved = SDL_FALSE;
+    SDL_LockMutex(s_mutexJoyStickEnum);
 
-        pCurList = SYS_Joystick;
-        SYS_Joystick = NULL;
+    s_bDeviceAdded = SDL_FALSE;
+    s_bDeviceRemoved = SDL_FALSE;
 
-        /* Look for DirectInput joysticks, wheels, head trackers, gamepads, etc.. */
-        IDirectInput8_EnumDevices(dinput,
-            DI8DEVCLASS_GAMECTRL,
-            EnumJoysticksCallback,
-            &pCurList, DIEDFL_ATTACHEDONLY);
+    pCurList = SYS_Joystick;
+    SYS_Joystick = NULL;
 
-        SDL_free(SDL_RawDevList);  /* in case we used this in DirectInput enumerator. */
-        SDL_RawDevList = NULL;
-        SDL_RawDevListCount = 0;
+    /* Look for DirectInput joysticks, wheels, head trackers, gamepads, etc.. */
+    IDirectInput8_EnumDevices(dinput, DI8DEVCLASS_GAMECTRL, EnumJoysticksCallback, &pCurList, DIEDFL_ATTACHEDONLY);
 
-        /* Look for XInput devices. Do this last, so they're first in the final list. */
-        EnumXInputDevices(&pCurList);
+    SDL_free(SDL_RawDevList);  /* in case we used this in DirectInput enumerator. */
+    SDL_RawDevList = NULL;
+    SDL_RawDevListCount = 0;
 
-        SDL_UnlockMutex( s_mutexJoyStickEnum );
-    }
+    /* Look for XInput devices. Do this last, so they're first in the final list. */
+    EnumXInputDevices(&pCurList);
 
-    if ( pCurList )
-    {
-        while ( pCurList )
-        {
-            JoyStick_DeviceData *pListNext = NULL;
+    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;
         }
+#endif /* !SDL_EVENTS_DISABLED */
 
+        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)

+ 0 - 5
src/joystick/windows/SDL_mmjoystick.c

@@ -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)

+ 0 - 8
src/joystick/winrt/SDL_xinputjoystick.c

@@ -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