Commit b7e7be20 authored by Felix Paul Kühne's avatar Felix Paul Kühne

macosx: more hotkey improvements

parent b497df76
...@@ -337,6 +337,8 @@ struct intf_sys_t ...@@ -337,6 +337,8 @@ struct intf_sys_t
AppleRemote * o_remote; AppleRemote * o_remote;
BOOL b_remote_button_hold; /* true as long as the user holds the left,right,plus or minus on the remote control */ BOOL b_remote_button_hold; /* true as long as the user holds the left,right,plus or minus on the remote control */
NSArray *o_usedHotkeys;
} }
+ (VLCMain *)sharedInstance; + (VLCMain *)sharedInstance;
...@@ -368,6 +370,7 @@ struct intf_sys_t ...@@ -368,6 +370,7 @@ struct intf_sys_t
- (BOOL)hasDefinedShortcutKey:(NSEvent *)o_event; - (BOOL)hasDefinedShortcutKey:(NSEvent *)o_event;
- (NSString *)VLCKeyToString:(NSString *)theString; - (NSString *)VLCKeyToString:(NSString *)theString;
- (unsigned int)VLCModifiersToCocoa:(NSString *)theString; - (unsigned int)VLCModifiersToCocoa:(NSString *)theString;
- (void)updateCurrentlyUsedHotkeys;
- (void)initStrings; - (void)initStrings;
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <vlc_keys.h> #include <vlc_keys.h>
#include <vlc_dialog.h> #include <vlc_dialog.h>
#include <vlc_url.h> #include <vlc_url.h>
#include <vlc_modules.h>
#include <unistd.h> /* execl() */ #include <unistd.h> /* execl() */
#import "intf.h" #import "intf.h"
...@@ -65,6 +66,8 @@ static void Run ( intf_thread_t *p_intf ); ...@@ -65,6 +66,8 @@ static void Run ( intf_thread_t *p_intf );
static void * ManageThread( void *user_data ); static void * ManageThread( void *user_data );
static unsigned int VLCModifiersToCocoa( unsigned int i_key );
static void updateProgressPanel (void *, const char *, float); static void updateProgressPanel (void *, const char *, float);
static bool checkProgressPanel (void *); static bool checkProgressPanel (void *);
static void destroyProgressPanel (void *); static void destroyProgressPanel (void *);
...@@ -1325,7 +1328,6 @@ unsigned int CocoaKeyToVLC( unichar i_key ) ...@@ -1325,7 +1328,6 @@ unsigned int CocoaKeyToVLC( unichar i_key )
- (NSString *)VLCKeyToString:(NSString *)theString - (NSString *)VLCKeyToString:(NSString *)theString
{ {
NSLog( @"got: %@", theString );
if (![theString isEqualToString:@""]) { if (![theString isEqualToString:@""]) {
theString = [theString stringByReplacingOccurrencesOfString:@"Command" withString:@""]; theString = [theString stringByReplacingOccurrencesOfString:@"Command" withString:@""];
theString = [theString stringByReplacingOccurrencesOfString:@"Alt" withString:@""]; theString = [theString stringByReplacingOccurrencesOfString:@"Alt" withString:@""];
...@@ -1334,7 +1336,6 @@ unsigned int CocoaKeyToVLC( unichar i_key ) ...@@ -1334,7 +1336,6 @@ unsigned int CocoaKeyToVLC( unichar i_key )
theString = [theString stringByReplacingOccurrencesOfString:@"+" withString:@""]; theString = [theString stringByReplacingOccurrencesOfString:@"+" withString:@""];
theString = [theString stringByReplacingOccurrencesOfString:@"-" withString:@""]; theString = [theString stringByReplacingOccurrencesOfString:@"-" withString:@""];
} }
NSLog( @"returning: %@", theString );
return theString; return theString;
} }
...@@ -1351,21 +1352,38 @@ unsigned int CocoaKeyToVLC( unichar i_key ) ...@@ -1351,21 +1352,38 @@ unsigned int CocoaKeyToVLC( unichar i_key )
unsigned int i_pressed_modifiers = 0; unsigned int i_pressed_modifiers = 0;
const struct hotkey *p_hotkeys; const struct hotkey *p_hotkeys;
int i; int i;
NSMutableString *tempString = [[[NSMutableString alloc] init] autorelease];
NSMutableString *tempStringPlus = [[[NSMutableString alloc] init] autorelease];
val.i_int = 0; val.i_int = 0;
p_hotkeys = p_intf->p_libvlc->p_hotkeys; p_hotkeys = p_intf->p_libvlc->p_hotkeys;
i_pressed_modifiers = [o_event modifierFlags]; i_pressed_modifiers = [o_event modifierFlags];
if( i_pressed_modifiers & NSShiftKeyMask ) if( i_pressed_modifiers & NSShiftKeyMask ) {
val.i_int |= KEY_MODIFIER_SHIFT; val.i_int |= KEY_MODIFIER_SHIFT;
if( i_pressed_modifiers & NSControlKeyMask ) [tempString appendString:@"Shift-"];
[tempStringPlus appendString:@"Shift+"];
}
if( i_pressed_modifiers & NSControlKeyMask ) {
val.i_int |= KEY_MODIFIER_CTRL; val.i_int |= KEY_MODIFIER_CTRL;
if( i_pressed_modifiers & NSAlternateKeyMask ) [tempString appendString:@"Ctrl-"];
[tempStringPlus appendString:@"Ctrl+"];
}
if( i_pressed_modifiers & NSAlternateKeyMask ) {
val.i_int |= KEY_MODIFIER_ALT; val.i_int |= KEY_MODIFIER_ALT;
if( i_pressed_modifiers & NSCommandKeyMask ) [tempString appendString:@"Alt-"];
[tempStringPlus appendString:@"Alt+"];
}
if( i_pressed_modifiers & NSCommandKeyMask ) {
val.i_int |= KEY_MODIFIER_COMMAND; val.i_int |= KEY_MODIFIER_COMMAND;
[tempString appendString:@"Command-"];
[tempStringPlus appendString:@"Command+"];
}
[tempString appendString:[[o_event charactersIgnoringModifiers] lowercaseString]];
[tempStringPlus appendString:[[o_event charactersIgnoringModifiers] lowercaseString]];
key = [[o_event charactersIgnoringModifiers] characterAtIndex: 0]; key = [[o_event charactersIgnoringModifiers] characterAtIndex: 0];
switch( key ) switch( key )
...@@ -1385,15 +1403,44 @@ unsigned int CocoaKeyToVLC( unichar i_key ) ...@@ -1385,15 +1403,44 @@ unsigned int CocoaKeyToVLC( unichar i_key )
val.i_int |= CocoaKeyToVLC( key ); val.i_int |= CocoaKeyToVLC( key );
if( p_hotkeys[i].psz_action != NULL ) if( [o_usedHotkeys indexOfObject: tempString] != NSNotFound || [o_usedHotkeys indexOfObject: tempStringPlus] != NSNotFound )
{ {
var_SetInteger( p_intf->p_libvlc, "key-pressed", val.i_int ); var_Set( p_intf->p_libvlc, "key-pressed", val );
return YES; return YES;
} }
return NO; return NO;
} }
- (void)updateCurrentlyUsedHotkeys
{
NSMutableArray *o_tempArray = [[NSMutableArray alloc] init];
/* Get the main Module */
module_t *p_main = module_get_main();
assert( p_main );
unsigned confsize;
module_config_t *p_config;
p_config = module_config_get (p_main, &confsize);
for (size_t i = 0; i < confsize; i++)
{
module_config_t *p_item = p_config + i;
if( (p_item->i_type & CONFIG_ITEM) && p_item->psz_name != NULL
&& !strncmp( p_item->psz_name , "key-", 4 )
&& !EMPTY_STR( p_item->psz_text ) )
{
if (p_item->value.psz)
[o_tempArray addObject: [NSString stringWithUTF8String:p_item->value.psz]];
}
}
module_config_free (p_config);
module_release (p_main);
o_usedHotkeys = [[NSArray alloc] initWithArray: o_usedHotkeys copyItems: YES];
}
#pragma mark - #pragma mark -
#pragma mark Other objects getters #pragma mark Other objects getters
......
...@@ -84,6 +84,7 @@ static VLCSimplePrefs *_o_sharedInstance = nil; ...@@ -84,6 +84,7 @@ static VLCSimplePrefs *_o_sharedInstance = nil;
theString = [theString stringByReplacingOccurrencesOfString:@"Ctrl" withString: [NSString stringWithUTF8String: "\xE2\x8C\x83"]]; theString = [theString stringByReplacingOccurrencesOfString:@"Ctrl" withString: [NSString stringWithUTF8String: "\xE2\x8C\x83"]];
theString = [theString stringByReplacingOccurrencesOfString:@"+" withString:@""]; theString = [theString stringByReplacingOccurrencesOfString:@"+" withString:@""];
theString = [theString stringByReplacingOccurrencesOfString:@"-" withString:@""]; theString = [theString stringByReplacingOccurrencesOfString:@"-" withString:@""];
theString = [theString capitalizedString];
} }
else else
theString = [NSString stringWithString:_NS("Not Set")]; theString = [NSString stringWithString:_NS("Not Set")];
...@@ -104,7 +105,7 @@ static VLCSimplePrefs *_o_sharedInstance = nil; ...@@ -104,7 +105,7 @@ static VLCSimplePrefs *_o_sharedInstance = nil;
[o_sprefs_win setToolbar: o_sprefs_toolbar]; [o_sprefs_win setToolbar: o_sprefs_toolbar];
/* setup useful stuff */ /* setup useful stuff */
o_hotkeysNonUseableKeys = [[NSArray arrayWithObjects: @"Command-c", @"Command-x", @"Command-v", @"Command-a", @"Command-," , @"Command-h", @"Command-Alt-h", @"Command-Shift-o", @"Command-o", @"Command-d", @"Command-n", @"Command-s", @"Command-z", @"Command-l", @"Command-r", @"Command-0", @"Command-1", @"Command-2", @"Command-3", @"Command-m", @"Command-w", @"Command-Shift-w", @"Command-Shift-c", @"Command-Shift-p", @"Command-i", @"Command-e", @"Command-Shift-e", @"Command-b", @"Command-Shift-m", @"Command-Ctrl-m", @"Command-?", @"Command-Alt-?", nil] retain]; o_hotkeysNonUseableKeys = [[NSArray arrayWithObjects: @"Command-c", @"Command-x", @"Command-v", @"Command-a", @"Command-," , @"Command-h", @"Command-Alt-h", @"Command-Shift-o", @"Command-o", @"Command-d", @"Command-n", @"Command-s", @"Command-z", @"Command-l", @"Command-r", @"Command-3", @"Command-m", @"Command-w", @"Command-Shift-w", @"Command-Shift-c", @"Command-Shift-p", @"Command-i", @"Command-e", @"Command-Shift-e", @"Command-b", @"Command-Shift-m", @"Command-Ctrl-m", @"Command-?", @"Command-Alt-?", nil] retain];
} }
#define CreateToolbarItem( o_name, o_desc, o_img, sel ) \ #define CreateToolbarItem( o_name, o_desc, o_img, sel ) \
...@@ -1241,6 +1242,11 @@ static inline void save_module_list( intf_thread_t * p_intf, id object, const ch ...@@ -1241,6 +1242,11 @@ static inline void save_module_list( intf_thread_t * p_intf, id object, const ch
b_hotkeyChanged = YES; b_hotkeyChanged = YES;
i_returnValue = [o_hotkeySettings indexOfObject: o_keyInTransition]; i_returnValue = [o_hotkeySettings indexOfObject: o_keyInTransition];
if( i_returnValue != NSNotFound )
[o_hotkeySettings replaceObjectAtIndex: i_returnValue withObject: [NSString string]];
NSString *tempString;
tempString = [o_keyInTransition stringByReplacingOccurrencesOfString:@"-" withString:@"+"];
i_returnValue = [o_hotkeySettings indexOfObject: tempString];
if( i_returnValue != NSNotFound ) if( i_returnValue != NSNotFound )
[o_hotkeySettings replaceObjectAtIndex: i_returnValue withObject: [NSString string]]; [o_hotkeySettings replaceObjectAtIndex: i_returnValue withObject: [NSString string]];
...@@ -1284,8 +1290,9 @@ static inline void save_module_list( intf_thread_t * p_intf, id object, const ch ...@@ -1284,8 +1290,9 @@ static inline void save_module_list( intf_thread_t * p_intf, id object, const ch
- (BOOL)changeHotkeyTo: (NSString *)theKey - (BOOL)changeHotkeyTo: (NSString *)theKey
{ {
NSInteger i_returnValue; NSInteger i_returnValue, i_returnValue2;
i_returnValue = [o_hotkeysNonUseableKeys indexOfObject: theKey]; i_returnValue = [o_hotkeysNonUseableKeys indexOfObject: theKey];
if( i_returnValue != NSNotFound || [theKey isEqualToString:@""] ) if( i_returnValue != NSNotFound || [theKey isEqualToString:@""] )
{ {
[o_hotkeys_change_keys_lbl setStringValue: _NS("Invalid combination")]; [o_hotkeys_change_keys_lbl setStringValue: _NS("Invalid combination")];
...@@ -1298,10 +1305,16 @@ static inline void save_module_list( intf_thread_t * p_intf, id object, const ch ...@@ -1298,10 +1305,16 @@ static inline void save_module_list( intf_thread_t * p_intf, id object, const ch
[o_hotkeys_change_keys_lbl setStringValue: [self OSXStringKeyToString:theKey]]; [o_hotkeys_change_keys_lbl setStringValue: [self OSXStringKeyToString:theKey]];
i_returnValue = [o_hotkeySettings indexOfObject: theKey]; i_returnValue = [o_hotkeySettings indexOfObject: theKey];
i_returnValue2 = [o_hotkeySettings indexOfObject: [theKey stringByReplacingOccurrencesOfString:@"-" withString:@"+"]];
if( i_returnValue != NSNotFound ) if( i_returnValue != NSNotFound )
[o_hotkeys_change_taken_lbl setStringValue: [NSString stringWithFormat: [o_hotkeys_change_taken_lbl setStringValue: [NSString stringWithFormat:
_NS("This combination is already taken by \"%@\"."), _NS("This combination is already taken by \"%@\"."),
[o_hotkeyDescriptions objectAtIndex: i_returnValue]]]; [o_hotkeyDescriptions objectAtIndex: i_returnValue]]];
else if( i_returnValue2 != NSNotFound )
[o_hotkeys_change_taken_lbl setStringValue: [NSString stringWithFormat:
_NS("This combination is already taken by \"%@\"."),
[o_hotkeyDescriptions objectAtIndex: i_returnValue2]]];
else else
[o_hotkeys_change_taken_lbl setStringValue: @""]; [o_hotkeys_change_taken_lbl setStringValue: @""];
......
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