ignore hot plugs in mac haptic layer IF hap tics hasn't been initialized.
parent
c2f6ab0cc1
commit
fff7503b6a
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue