ignore hot plugs in mac haptic layer IF hap tics hasn't been initialized.

Edward Rudd 2014-02-07 09:35:13 -05:00
parent c2f6ab0cc1
commit fff7503b6a
1 changed files with 15 additions and 2 deletions

View File

@ -85,7 +85,7 @@ static int HIDGetDeviceProduct(io_service_t dev, char *name);
static SDL_hapticlist_item *SDL_hapticlist = NULL; static SDL_hapticlist_item *SDL_hapticlist = NULL;
static SDL_hapticlist_item *SDL_hapticlist_tail = NULL; static SDL_hapticlist_item *SDL_hapticlist_tail = NULL;
static int numhaptics = 0; static int numhaptics = -1;
/* /*
* Like strerror but for force feedback errors. * Like strerror but for force feedback errors.
@ -155,6 +155,11 @@ SDL_SYS_HapticInit(void)
CFDictionaryRef match; CFDictionaryRef match;
io_service_t device; io_service_t device;
if (numhaptics != -1) {
return SDL_Error("Haptic subsystem already initialized!");
}
numhaptics = 0;
/* Get HID devices. */ /* Get HID devices. */
match = IOServiceMatching(kIOHIDDeviceKey); match = IOServiceMatching(kIOHIDDeviceKey);
if (match == NULL) { if (match == NULL) {
@ -214,6 +219,10 @@ MacHaptic_MaybeAddDevice( io_object_t device )
CFTypeRef refCF; CFTypeRef refCF;
SDL_hapticlist_item *item; SDL_hapticlist_item *item;
if (numhaptics == -1) {
return -1; /* not initialized. We'll pick these up on enumeration if we init later. */
}
/* Check for force feedback. */ /* Check for force feedback. */
if (FFIsForceFeedback(device) != FF_OK) { if (FFIsForceFeedback(device) != FF_OK) {
return -1; return -1;
@ -288,6 +297,10 @@ MacHaptic_MaybeRemoveDevice( io_object_t device )
SDL_hapticlist_item *item; SDL_hapticlist_item *item;
SDL_hapticlist_item *prev = NULL; SDL_hapticlist_item *prev = NULL;
if (numhaptics == -1) {
return -1; /* not initialized. ignore this. */
}
for (item = SDL_hapticlist; item != NULL; item = item->next) { for (item = SDL_hapticlist; item != NULL; item = item->next) {
/* found it, remove it. */ /* found it, remove it. */
if (IOObjectIsEqualTo((io_object_t) item->dev, device)) { if (IOObjectIsEqualTo((io_object_t) item->dev, device)) {
@ -674,7 +687,7 @@ SDL_SYS_HapticQuit(void)
IOObjectRelease(item->dev); IOObjectRelease(item->dev);
SDL_free(item); SDL_free(item);
} }
numhaptics = 0; numhaptics = -1;
} }