From: Joe Wreschnig Date: Mon, 27 Oct 2014 10:40:03 +0000 (+0100) Subject: Fix for dropping input events in OS X 10.10. X-Git-Tag: version-1.2~1 X-Git-Url: https://git.yukkurigames.com/?a=commitdiff_plain;ds=inline;h=85f90334bb98a2bb91aca5c78b4a0779207b8ce0;hp=0a8d6333a3ac4684b70ab7f3581a93bf96638d6f;p=enjoyable.git Fix for dropping input events in OS X 10.10. Value callbacks no longer include the device in the sender (or at least, IOHIDQueueGetDevice now returns NULL). Instead, you need to query the device directly from the IOHIDValueRef via its IOHIDElementRef. --- diff --git a/Classes/NJHIDManager.h b/Classes/NJHIDManager.h index af86b3b..c287cfe 100644 --- a/Classes/NJHIDManager.h +++ b/Classes/NJHIDManager.h @@ -33,9 +33,7 @@ - (void)HIDManager:(NJHIDManager *)manager deviceAdded:(IOHIDDeviceRef)device; - (void)HIDManager:(NJHIDManager *)manager deviceRemoved:(IOHIDDeviceRef)device; -- (void)HIDManager:(NJHIDManager *)manager - valueChanged:(IOHIDValueRef)value - fromDevice:(IOHIDDeviceRef)device; +- (void)HIDManager:(NJHIDManager *)manager valueChanged:(IOHIDValueRef)value; - (void)HIDManager:(NJHIDManager *)manager didError:(NSError *)error; diff --git a/Classes/NJHIDManager.m b/Classes/NJHIDManager.m index 3dbaec3..5c2b7cd 100644 --- a/Classes/NJHIDManager.m +++ b/Classes/NJHIDManager.m @@ -21,8 +21,7 @@ static void _input(void *ctx, IOReturn inResult, void *inSender, IOHIDValueRef value) { NJHIDManager *self = (__bridge NJHIDManager *)ctx; - IOHIDDeviceRef device = IOHIDQueueGetDevice(inSender); - [self.delegate HIDManager:self valueChanged:value fromDevice:device]; + [self.delegate HIDManager:self valueChanged:value]; } static void _add(void *ctx, IOReturn inResult, void *inSender, IOHIDDeviceRef device) { diff --git a/Classes/NJInputController.m b/Classes/NJInputController.m index 2200cb0..84c8b69 100644 --- a/Classes/NJInputController.m +++ b/Classes/NJInputController.m @@ -115,7 +115,9 @@ static CVReturn _updateDL(CVDisplayLinkRef displayLink, CVDisplayLinkStart(_displayLink); } -- (void)runOutputForDevice:(IOHIDDeviceRef)device value:(IOHIDValueRef)value { +- (void)runOutputForValue:(IOHIDValueRef)value { + IOHIDElementRef elt = value ? IOHIDValueGetElement(value) : NULL; + IOHIDDeviceRef device = elt ? IOHIDElementGetDevice(elt) : NULL; NJDevice *dev = [self findDeviceByRef:device]; NJInput *mainInput = [dev inputForEvent:value]; [mainInput notifyEvent:value]; @@ -129,7 +131,9 @@ static CVReturn _updateDL(CVDisplayLinkRef displayLink, } } -- (void)showOutputForDevice:(IOHIDDeviceRef)device value:(IOHIDValueRef)value { +- (void)showOutputForValue:(IOHIDValueRef)value { + IOHIDElementRef elt = value ? IOHIDValueGetElement(value) : NULL; + IOHIDDeviceRef device = elt ? IOHIDElementGetDevice(elt) : NULL; NJDevice *dev = [self findDeviceByRef:device]; NJInput *handler = [dev handlerForEvent:value]; if (!handler) @@ -138,14 +142,11 @@ static CVReturn _updateDL(CVDisplayLinkRef displayLink, [self.delegate inputController:self didInput:handler]; } -- (void)HIDManager:(NJHIDManager *)manager - valueChanged:(IOHIDValueRef)value - fromDevice:(IOHIDDeviceRef)device { - if (self.simulatingEvents - && !NSApplication.sharedApplication.isActive) { - [self runOutputForDevice:device value:value]; +- (void)HIDManager:(NJHIDManager *)manager valueChanged:(IOHIDValueRef)value { + if (self.simulatingEvents && !NSApplication.sharedApplication.isActive) { + [self runOutputForValue:value]; } else { - [self showOutputForDevice:device value:value]; + [self showOutputForValue:value]; } } diff --git a/Info.plist b/Info.plist index 71ed29e..12fb106 100644 --- a/Info.plist +++ b/Info.plist @@ -46,7 +46,7 @@ CFBundleSignature ???? CFBundleVersion - 636 + 647 LSApplicationCategoryType public.app-category.utilities NSHumanReadableCopyright