66- (id) initWithDelegate: (
id) _remoteControlDelegate {
67 if ( (
self = [super initWithDelegate: _remoteControlDelegate]) ) {
70 unsigned int modifiers = cmdKey + shiftKey + controlKey;
84 [hotKeyRemoteEventMapping release];
88- (void) mapRemoteButton: (
RemoteControlEventIdentifier) remoteButtonIdentifier defaultKeycode: (
unsigned int) defaultKeycode defaultModifiers: (
unsigned int) defaultModifiers {
89 NSString* defaultsKey =
NULL;
91 switch(remoteButtonIdentifier) {
93 defaultsKey =
@"plus";
96 defaultsKey =
@"minus";
99 defaultsKey =
@"menu";
102 defaultsKey =
@"play";
105 defaultsKey =
@"right";
108 defaultsKey =
@"left";
111 defaultsKey =
@"playhold";
115 NSLog(
@"Apple Remote: Unknown global keyboard defaults key for button identifier %d", remoteButtonIdentifier);
120 NSNumber* modifiersCfg = [[NSUserDefaults standardUserDefaults] objectForKey: [NSString stringWithFormat: @"mac.remotecontrols.GlobalKeyboardDevice.%@_modifiers", defaultsKey]];
121 NSNumber* keycodeCfg = [[NSUserDefaults standardUserDefaults] objectForKey: [NSString stringWithFormat: @"mac.remotecontrols.GlobalKeyboardDevice.%@_keycode", defaultsKey]];
123 unsigned int modifiers = defaultModifiers;
124 if (modifiersCfg) modifiers = [modifiersCfg unsignedIntValue];
126 unsigned int keycode = defaultKeycode;
127 if (keycodeCfg) keycode = [keycodeCfg unsignedIntValue];
129 [
self registerHotKeyCode: keycode modifiers: modifiers remoteEventIdentifier: remoteButtonIdentifier];
132- (void) setListeningToRemote: (
BOOL) value {
135 [
self startListening: self];
137 [
self stopListening: self];
144- (void) startListening: (
id) sender {
148 EventTypeSpec
const eventSpec[2] = {
149 { kEventClassKeyboard, kEventHotKeyPressed },
150 { kEventClassKeyboard, kEventHotKeyReleased }
153 InstallEventHandler( GetEventDispatcherTarget(),
159- (void) stopListening: (
id) sender {
166 NSEnumerator*
values = [hotKeyRemoteEventMapping objectEnumerator];
167 NSNumber* remoteIdentifier;
168 while( (remoteIdentifier = [values nextObject]) ) {
169 if ([remoteIdentifier unsignedIntValue] == identifier)
return YES;
180 EventHotKeyID hotKeyID;
181 EventHotKeyRef carbonHotKey;
183 hotKeyID.signature =
'PTHk';
184 hotKeyID.id = (long)keycode;
186 err = RegisterEventHotKey(keycode, modifiers, hotKeyID, GetEventDispatcherTarget(), 0, &carbonHotKey );
191 [hotKeyRemoteEventMapping setObject: [NSNumber numberWithInt:identifier] forKey: [NSNumber numberWithUnsignedInt: hotKeyID.id]];
221 NSNumber* remoteEventIdentifier = [hotKeyRemoteEventMapping objectForKey:[NSNumber numberWithUnsignedInt: id]];
222 return [remoteEventIdentifier unsignedIntValue];
226 [delegate sendRemoteButtonEvent: event pressedDown: pressedDown remoteControl:self];
232static OSStatus
hotKeyEventHandler(EventHandlerCallRef inHandlerRef, EventRef inEvent,
void* userData )
237 GetEventParameter(inEvent,kEventParamDirectObject,typeEventHotKeyID,
NULL,
sizeof(hkCom),
NULL,&hkCom);
249 [keyboardDevice sendRemoteButtonEvent: identifier pressedDown: pressedDown];
static RemoteControlEventIdentifier lastEvent
static OSStatus hotKeyEventHandler(EventHandlerCallRef, EventRef, void *)
RemoteControlEventIdentifier
BOOL isListeningToRemote()
const char * remoteControlDeviceName()
EventHandlerRef eventHandlerRef
void mapRemoteButton:defaultKeycode:defaultModifiers:(RemoteControlEventIdentifier remoteButtonIdentifier,[defaultKeycode] unsigned int defaultKeycode,[defaultModifiers] unsigned int defaultModifiers)
NSMutableDictionary * hotKeyRemoteEventMapping
std::vector< char * > values
const wchar_t *typedef BOOL
::boost::spirit::classic::rule< ScannerT > identifier