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

macosx: more hotkey improvements

parent b497df76
......@@ -337,6 +337,8 @@ struct intf_sys_t
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 */
NSArray *o_usedHotkeys;
}
+ (VLCMain *)sharedInstance;
......@@ -368,6 +370,7 @@ struct intf_sys_t
- (BOOL)hasDefinedShortcutKey:(NSEvent *)o_event;
- (NSString *)VLCKeyToString:(NSString *)theString;
- (unsigned int)VLCModifiersToCocoa:(NSString *)theString;
- (void)updateCurrentlyUsedHotkeys;
- (void)initStrings;
......
......@@ -34,6 +34,7 @@
#include <vlc_keys.h>
#include <vlc_dialog.h>
#include <vlc_url.h>
#include <vlc_modules.h>
#include <unistd.h> /* execl() */
#import "intf.h"
......@@ -65,6 +66,8 @@ static void Run ( intf_thread_t *p_intf );
static void * ManageThread( void *user_data );
static unsigned int VLCModifiersToCocoa( unsigned int i_key );
static void updateProgressPanel (void *, const char *, float);
static bool checkProgressPanel (void *);
static void destroyProgressPanel (void *);
......@@ -1325,7 +1328,6 @@ unsigned int CocoaKeyToVLC( unichar i_key )
- (NSString *)VLCKeyToString:(NSString *)theString
{
NSLog( @"got: %@", theString );
if (![theString isEqualToString:@""]) {
theString = [theString stringByReplacingOccurrencesOfString:@"Command" withString:@""];
theString = [theString stringByReplacingOccurrencesOfString:@"Alt" withString:@""];
......@@ -1334,7 +1336,6 @@ unsigned int CocoaKeyToVLC( unichar i_key )
theString = [theString stringByReplacingOccurrencesOfString:@"+" withString:@""];
theString = [theString stringByReplacingOccurrencesOfString:@"-" withString:@""];
}
NSLog( @"returning: %@", theString );
return theString;
}
......@@ -1351,21 +1352,38 @@ unsigned int CocoaKeyToVLC( unichar i_key )
unsigned int i_pressed_modifiers = 0;
const struct hotkey *p_hotkeys;
int i;
NSMutableString *tempString = [[[NSMutableString alloc] init] autorelease];
NSMutableString *tempStringPlus = [[[NSMutableString alloc] init] autorelease];
val.i_int = 0;
p_hotkeys = p_intf->p_libvlc->p_hotkeys;
i_pressed_modifiers = [o_event modifierFlags];
if( i_pressed_modifiers & NSShiftKeyMask )
if( i_pressed_modifiers & NSShiftKeyMask ) {
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;
if( i_pressed_modifiers & NSAlternateKeyMask )
[tempString appendString:@"Ctrl-"];
[tempStringPlus appendString:@"Ctrl+"];
}
if( i_pressed_modifiers & NSAlternateKeyMask ) {
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;
[tempString appendString:@"Command-"];
[tempStringPlus appendString:@"Command+"];
}
[tempString appendString:[[o_event charactersIgnoringModifiers] lowercaseString]];
[tempStringPlus appendString:[[o_event charactersIgnoringModifiers] lowercaseString]];
key = [[o_event charactersIgnoringModifiers] characterAtIndex: 0];
switch( key )
......@@ -1385,15 +1403,44 @@ unsigned int CocoaKeyToVLC( unichar i_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 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 Other objects getters
......
......@@ -84,6 +84,7 @@ static VLCSimplePrefs *_o_sharedInstance = nil;
theString = [theString stringByReplacingOccurrencesOfString:@"Ctrl" withString: [NSString stringWithUTF8String: "\xE2\x8C\x83"]];
theString = [theString stringByReplacingOccurrencesOfString:@"+" withString:@""];
theString = [theString stringByReplacingOccurrencesOfString:@"-" withString:@""];
theString = [theString capitalizedString];
}
else
theString = [NSString stringWithString:_NS("Not Set")];
......@@ -104,7 +105,7 @@ static VLCSimplePrefs *_o_sharedInstance = nil;
[o_sprefs_win setToolbar: o_sprefs_toolbar];
/* 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 ) \
......@@ -1241,6 +1242,11 @@ static inline void save_module_list( intf_thread_t * p_intf, id object, const ch
b_hotkeyChanged = YES;
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 )
[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
- (BOOL)changeHotkeyTo: (NSString *)theKey
{
NSInteger i_returnValue;
NSInteger i_returnValue, i_returnValue2;
i_returnValue = [o_hotkeysNonUseableKeys indexOfObject: theKey];
if( i_returnValue != NSNotFound || [theKey isEqualToString:@""] )
{
[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
[o_hotkeys_change_keys_lbl setStringValue: [self OSXStringKeyToString:theKey]];
i_returnValue = [o_hotkeySettings indexOfObject: theKey];
i_returnValue2 = [o_hotkeySettings indexOfObject: [theKey stringByReplacingOccurrencesOfString:@"-" withString:@"+"]];
if( i_returnValue != NSNotFound )
[o_hotkeys_change_taken_lbl setStringValue: [NSString stringWithFormat:
_NS("This combination is already taken by \"%@\"."),
[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
[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