2007-10-03 18:26:39 -04:00
|
|
|
//
|
|
|
|
// MediaKeysApplication.m
|
|
|
|
// Cog
|
|
|
|
//
|
|
|
|
// Created by Vincent Spader on 10/3/07.
|
|
|
|
// Copyright 2007 __MyCompanyName__. All rights reserved.
|
|
|
|
//
|
|
|
|
|
|
|
|
#import "MediaKeysApplication.h"
|
|
|
|
#import "AppController.h"
|
2013-10-12 18:26:52 -03:00
|
|
|
#import "SPMediaKeyTap.h"
|
|
|
|
#import "Logging.h"
|
2007-10-03 18:26:39 -04:00
|
|
|
|
|
|
|
@implementation MediaKeysApplication
|
|
|
|
|
2013-10-12 18:26:52 -03:00
|
|
|
+(void)initialize;
|
2007-10-03 18:26:39 -04:00
|
|
|
{
|
2013-10-12 18:26:52 -03:00
|
|
|
if([self class] != [MediaKeysApplication class]) return;
|
|
|
|
|
|
|
|
// Register defaults for the whitelist of apps that want to use media keys
|
|
|
|
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:
|
|
|
|
[SPMediaKeyTap defaultMediaKeyUserBundleIdentifiers], kMediaKeyUsingBundleIdentifiersDefaultsKey,
|
|
|
|
nil]];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)finishLaunching {
|
|
|
|
[super finishLaunching];
|
|
|
|
|
|
|
|
keyTap = [[SPMediaKeyTap alloc] initWithDelegate:self];
|
|
|
|
if([SPMediaKeyTap usesGlobalMediaKeyTap])
|
|
|
|
[keyTap startWatchingMediaKeys];
|
|
|
|
else
|
|
|
|
ALog(@"Media key monitoring disabled");
|
2007-10-03 18:26:39 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
- (void)sendEvent: (NSEvent*)event
|
|
|
|
{
|
2013-10-12 18:26:52 -03:00
|
|
|
BOOL shouldHandleMediaKeyEventLocally = ![SPMediaKeyTap usesGlobalMediaKeyTap];
|
|
|
|
|
|
|
|
if(shouldHandleMediaKeyEventLocally && [event type] == NSSystemDefined && [event subtype] == 8 )
|
2007-10-03 18:26:39 -04:00
|
|
|
{
|
2013-10-12 18:26:52 -03:00
|
|
|
[self mediaKeyTap:nil receivedMediaKeyEvent:event];
|
2007-10-03 18:26:39 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
[super sendEvent: event];
|
|
|
|
}
|
2013-10-12 18:26:52 -03:00
|
|
|
|
|
|
|
-(void)mediaKeyTap:(SPMediaKeyTap*)keyTap receivedMediaKeyEvent:(NSEvent*)event;
|
|
|
|
{
|
|
|
|
NSAssert([event type] == NSSystemDefined && [event subtype] == SPSystemDefinedEventMediaKeys, @"Unexpected NSEvent in mediaKeyTap:receivedMediaKeyEvent:");
|
|
|
|
|
|
|
|
int keyCode = (([event data1] & 0xFFFF0000) >> 16);
|
|
|
|
int keyFlags = ([event data1] & 0x0000FFFF);
|
|
|
|
BOOL keyIsPressed = (((keyFlags & 0xFF00) >> 8)) == 0xA;
|
|
|
|
|
|
|
|
if (!keyIsPressed) // pressed and released
|
|
|
|
{
|
|
|
|
switch( keyCode )
|
|
|
|
{
|
|
|
|
case NX_KEYTYPE_PLAY:
|
|
|
|
[(AppController *)[self delegate] clickPlay];
|
|
|
|
break;
|
|
|
|
|
|
|
|
case NX_KEYTYPE_NEXT:
|
|
|
|
case NX_KEYTYPE_FAST:
|
|
|
|
[(AppController *)[self delegate] clickNext];
|
|
|
|
break;
|
|
|
|
|
|
|
|
case NX_KEYTYPE_PREVIOUS:
|
|
|
|
case NX_KEYTYPE_REWIND:
|
|
|
|
[(AppController *)[self delegate] clickPrev];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-10-03 18:26:39 -04:00
|
|
|
@end
|