diff --git a/PowerKey/PKPowerKeyEventListener.m b/PowerKey/PKPowerKeyEventListener.m index ffc2964..17a4518 100644 --- a/PowerKey/PKPowerKeyEventListener.m +++ b/PowerKey/PKPowerKeyEventListener.m @@ -8,6 +8,7 @@ #import "PKPowerKeyEventListener.h" #include +#include #include #import "PKAppDelegate.h" #import "PKScriptController.h" @@ -134,6 +135,33 @@ - (CGEventRef)newPowerKeyEventOrUnmodifiedSystemDefinedEvent:(CGEventRef)systemE [PKScriptController runScript]; + } else if ([@[@NX_KEYTYPE_PLAY, @NX_KEYTYPE_PREVIOUS, @NX_KEYTYPE_NEXT] containsObject:@(replacementKeyCode)]) { + // Helper method for special keys. + // Source: http://stackoverflow.com/questions/11045814/emulate-media-key-press-on-mac + // Also inspired from https://github.com/jguice/mac-bt-headset-fix/commit/33401146ca0f45fec8d58765bff99398800de97a#diff-6a92cb546e342fc740fb0b588977dc48 + NSEvent* inputEvent; + // create and send down key event + inputEvent = [NSEvent otherEventWithType: NSSystemDefined + location: CGPointZero + modifierFlags: 0xa00 + timestamp: 0 + windowNumber: 0 + context: 0 + subtype: 8 + data1: (replacementKeyCode << 16) | ((0xa) << 8) + data2: -1]; + CGEventPost(0, [inputEvent CGEvent]); + // create and send up key event + inputEvent = [NSEvent otherEventWithType: NSSystemDefined + location: CGPointZero + modifierFlags: 0xb00 + timestamp: 0 + windowNumber: 0 + context: 0 + subtype: 8 + data1: (replacementKeyCode << 16) | ((0xb) << 8) + data2: -1]; + CGEventPost(0, [inputEvent CGEvent]); } else { CGEventSourceRef eventSource = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); CGEventRef inputEvent = CGEventCreateKeyboardEvent(eventSource, replacementKeyCode, true); diff --git a/PowerKey/PKPreferencesWindowController.m b/PowerKey/PKPreferencesWindowController.m index f4145be..6ee02df 100644 --- a/PowerKey/PKPreferencesWindowController.m +++ b/PowerKey/PKPreferencesWindowController.m @@ -8,6 +8,7 @@ #import "PKPreferencesWindowController.h" #include +#include #import "PKAppDelegate.h" #import "PKPowerKeyEventListener.h" #import "PKScriptController.h" @@ -65,6 +66,9 @@ - (NSArray *)powerKeyReplacements { @[@"Tab", @(kVK_Tab)], @[@"Return", @(kVK_Return)], @[@"Enter", @(kVK_ANSI_KeypadEnter)], + @[@"Play/Pause (media)", @(NX_KEYTYPE_PLAY)], + @[@"Previous (media)", @(NX_KEYTYPE_PREVIOUS)], + @[@"Next (media)", @(NX_KEYTYPE_NEXT)], @[@"F13", @(kVK_F13)], @[@"Script", @(kPowerKeyScriptTag)], ];