cog/Application/MediaKeysApplication.m

78 lines
2.2 KiB
Objective-C

//
// MediaKeysApplication.m
// Cog
//
// Created by Vincent Spader on 10/3/07.
// Copyright 2007 __MyCompanyName__. All rights reserved.
//
#import "MediaKeysApplication.h"
#import "AppController.h"
#import "SPMediaKeyTap.h"
#import "Logging.h"
@implementation MediaKeysApplication
+(void)initialize;
{
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");
}
- (void)sendEvent: (NSEvent*)event
{
BOOL shouldHandleMediaKeyEventLocally = ![SPMediaKeyTap usesGlobalMediaKeyTap];
if(shouldHandleMediaKeyEventLocally && [event type] == NSSystemDefined && [event subtype] == 8 )
{
[self mediaKeyTap:nil receivedMediaKeyEvent:event];
}
[super sendEvent: event];
}
-(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;
}
}
}
@end