Fixed goofy logic in haptic device comparison code. Mitchell Keith Bloch did the research on this bug, and came up with a slightly different patch than this. Partially fixes Bugzilla #2126.
diff --git a/src/haptic/windows/SDL_syshaptic.c b/src/haptic/windows/SDL_syshaptic.c
index c8cbd59..09cca96 100644
--- a/src/haptic/windows/SDL_syshaptic.c
+++ b/src/haptic/windows/SDL_syshaptic.c
@@ -636,9 +636,11 @@ SDL_SYS_JoystickIsHaptic(SDL_Joystick * joystick)
int
SDL_SYS_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick)
{
- if ((joystick->hwdata->bXInputHaptic == haptic->hwdata->bXInputHaptic) && (haptic->hwdata->userid == joystick->hwdata->userid)) {
- return 1;
- } else {
+ if ((joystick->hwdata->bXInputHaptic != haptic->hwdata->bXInputHaptic) {
+ return 0; /* one is XInput, one is not; not the same device. */
+ } else if (joystick->hwdata->bXInputHaptic) { /* XInput */
+ return (haptic->hwdata->userid == joystick->hwdata->userid);
+ } else { /* DirectInput */
HRESULT ret;
DIDEVICEINSTANCE hap_instance, joy_instance;