From 408f769e5768bf1c8dbc840bef1c560a91de6d5f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20Paul=20K=C3=BChne?= Date: Fri, 10 Apr 2009 15:53:07 +0200 Subject: [PATCH] macosx: implement controll support for the Media Keys on Brushed Al Apple keyboards I'll add an option to disable this feature later on --- NEWS | 1 + modules/gui/macosx/intf.h | 14 ++++++++ modules/gui/macosx/intf.m | 68 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 81 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 6be038a0b0..4febfff379 100644 --- a/NEWS +++ b/NEWS @@ -72,6 +72,7 @@ Linux/Windows interface: * Better integration in GTK environments Mac OS X Interface: + * Controllable by the Media Keys on modern Apple keyboards (brushed Aluminium) * Reveal-in-Finder functionality for locally stored items. * Easy addition of Subtitles through the Video menu * Additional usability improvements diff --git a/modules/gui/macosx/intf.h b/modules/gui/macosx/intf.h index 1bbb4d7363..81c71aa160 100644 --- a/modules/gui/macosx/intf.h +++ b/modules/gui/macosx/intf.h @@ -424,3 +424,17 @@ static void MsgCallback( msg_cb_data_t *, msg_item_t *, unsigned ); @interface VLCMain (Internal) - (void)handlePortMessage:(NSPortMessage *)o_msg; @end + +/***************************************************************************** + * VLCApplication interface + *****************************************************************************/ + +@interface VLCApplication : NSApplication +{ + BOOL b_justJumped; +} + +- (void)sendEvent: (NSEvent*)event; +- (void)resetJump; + +@end diff --git a/modules/gui/macosx/intf.m b/modules/gui/macosx/intf.m index a1503c93ee..e7d1b63de2 100644 --- a/modules/gui/macosx/intf.m +++ b/modules/gui/macosx/intf.m @@ -56,7 +56,8 @@ #import "simple_prefs.h" #import "vlm.h" -#import +#import /* for crashlog send mechanism */ +#import /* for the media key support */ /***************************************************************************** * Local prototypes. @@ -132,7 +133,7 @@ static void Run( intf_thread_t *p_intf ) /* Install a jmpbuffer to where we can go back before the NSApp exit * see applicationWillTerminate: */ - [NSApplication sharedApplication]; + [VLCApplication sharedApplication]; [[VLCMain sharedInstance] setIntf: p_intf]; [NSBundle loadNibNamed: @"MainMenu" owner: NSApp]; @@ -2766,3 +2767,66 @@ end: } @end + +/***************************************************************************** + * VLCApplication interface + * exclusively used to implement media key support on Al Apple keyboards + * b_justJumped is required as the keyboard send its events faster than + * the user can actually jump through his media + *****************************************************************************/ + +@implementation VLCApplication + +- (void)sendEvent: (NSEvent*)event +{ + if( [event type] == NSSystemDefined && [event subtype] == 8 ) + { + int keyCode = (([event data1] & 0xFFFF0000) >> 16); + int keyFlags = ([event data1] & 0x0000FFFF); + int keyState = (((keyFlags & 0xFF00) >> 8)) == 0xA; + int keyRepeat = (keyFlags & 0x1); + + if( keyCode == NX_KEYTYPE_PLAY && keyState == 0 ) + var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_PLAY_PAUSE ); + + if( keyCode == NX_KEYTYPE_FAST && !b_justJumped ) + { + if( keyState == 0 && keyRepeat == 0 ) + { + var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_NEXT ); + } + else if( keyRepeat == 1 ) + { + var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_FORWARD_SHORT ); + b_justJumped = YES; + [self performSelector:@selector(resetJump) + withObject: NULL + afterDelay:0.25]; + } + } + + if( keyCode == NX_KEYTYPE_REWIND && !b_justJumped ) + { + if( keyState == 0 && keyRepeat == 0 ) + { + var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_PREV ); + } + else if( keyRepeat == 1 ) + { + var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_JUMP_BACKWARD_SHORT ); + b_justJumped = YES; + [self performSelector:@selector(resetJump) + withObject: NULL + afterDelay:0.25]; + } + } + } + [super sendEvent: event]; +} + +- (void)resetJump +{ + b_justJumped = NO; +} + +@end -- 2.39.2