Commit 408f769e authored by Felix Paul Kühne's avatar Felix Paul Kühne

macosx: implement controll support for the Media Keys on Brushed Al Apple keyboards

I'll add an option to disable this feature later on
parent 0aeb82b6
...@@ -72,6 +72,7 @@ Linux/Windows interface: ...@@ -72,6 +72,7 @@ Linux/Windows interface:
* Better integration in GTK environments * Better integration in GTK environments
Mac OS X Interface: Mac OS X Interface:
* Controllable by the Media Keys on modern Apple keyboards (brushed Aluminium)
* Reveal-in-Finder functionality for locally stored items. * Reveal-in-Finder functionality for locally stored items.
* Easy addition of Subtitles through the Video menu * Easy addition of Subtitles through the Video menu
* Additional usability improvements * Additional usability improvements
......
...@@ -424,3 +424,17 @@ static void MsgCallback( msg_cb_data_t *, msg_item_t *, unsigned ); ...@@ -424,3 +424,17 @@ static void MsgCallback( msg_cb_data_t *, msg_item_t *, unsigned );
@interface VLCMain (Internal) @interface VLCMain (Internal)
- (void)handlePortMessage:(NSPortMessage *)o_msg; - (void)handlePortMessage:(NSPortMessage *)o_msg;
@end @end
/*****************************************************************************
* VLCApplication interface
*****************************************************************************/
@interface VLCApplication : NSApplication
{
BOOL b_justJumped;
}
- (void)sendEvent: (NSEvent*)event;
- (void)resetJump;
@end
...@@ -56,7 +56,8 @@ ...@@ -56,7 +56,8 @@
#import "simple_prefs.h" #import "simple_prefs.h"
#import "vlm.h" #import "vlm.h"
#import <AddressBook/AddressBook.h> #import <AddressBook/AddressBook.h> /* for crashlog send mechanism */
#import <IOKit/hidsystem/ev_keymap.h> /* for the media key support */
/***************************************************************************** /*****************************************************************************
* Local prototypes. * Local prototypes.
...@@ -132,7 +133,7 @@ static void Run( intf_thread_t *p_intf ) ...@@ -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 /* Install a jmpbuffer to where we can go back before the NSApp exit
* see applicationWillTerminate: */ * see applicationWillTerminate: */
[NSApplication sharedApplication]; [VLCApplication sharedApplication];
[[VLCMain sharedInstance] setIntf: p_intf]; [[VLCMain sharedInstance] setIntf: p_intf];
[NSBundle loadNibNamed: @"MainMenu" owner: NSApp]; [NSBundle loadNibNamed: @"MainMenu" owner: NSApp];
...@@ -2766,3 +2767,66 @@ end: ...@@ -2766,3 +2767,66 @@ end:
} }
@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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment