mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-23 20:01:11 +00:00
Implement NSUserKeyEquivalents default for providing custom key equivalents for menu items
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@30620 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
7a98005c86
commit
3b806bf24c
2 changed files with 53 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2010-06-07 Doug Simons <doug.simons@testplant.com>
|
||||
|
||||
* Source/NSMenuItem.m:
|
||||
Implement NSUserKeyEquivalents default for providing custom key
|
||||
equivalents for menu items based on their title.
|
||||
|
||||
2010-06-05 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||
|
||||
* Source/GSWindowDecorationView.m ([-removeSubview:]): Uncommented
|
||||
|
|
|
@ -134,9 +134,9 @@ static Class imageClass;
|
|||
return nil;
|
||||
|
||||
//_menu = nil;
|
||||
[self setTitle: aString];
|
||||
[self setKeyEquivalent: charCode];
|
||||
_keyEquivalentModifierMask = NSCommandKeyMask;
|
||||
[self setTitle: aString]; // do this AFTER setKeyEquivalent: in case NSUserKeyEquivalents is defined
|
||||
_mnemonicLocation = 255; // No mnemonic
|
||||
_state = NSOffState;
|
||||
_enabled = YES;
|
||||
|
@ -151,6 +151,50 @@ static Class imageClass;
|
|||
return self;
|
||||
}
|
||||
|
||||
- (void) _updateKeyEquivalent
|
||||
{
|
||||
// Update keyEquivalent based on any entries in NSUserKeyEquivalents in the defaults database
|
||||
// TODO: also check in other defaults domains, to allow NSUserKeyEquivalents dictionaries
|
||||
// in different domains to provide overrides of different menu items.
|
||||
NSString *userKeyEquivalent = [(NSDictionary*)[[NSUserDefaults standardUserDefaults]
|
||||
objectForKey: @"NSUserKeyEquivalents"]
|
||||
objectForKey: _title];
|
||||
if (userKeyEquivalent)
|
||||
{
|
||||
// check for leading symbols representing modifier flags: @, ~, $, ^
|
||||
unsigned int modifierMask = 0;
|
||||
while ([userKeyEquivalent length] > 1)
|
||||
{
|
||||
if ([userKeyEquivalent hasPrefix:@"@"])
|
||||
{
|
||||
modifierMask |= NSCommandKeyMask;
|
||||
userKeyEquivalent = [userKeyEquivalent substringFromIndex:1];
|
||||
}
|
||||
else if ([userKeyEquivalent hasPrefix:@"~"])
|
||||
{
|
||||
modifierMask |= NSAlternateKeyMask;
|
||||
userKeyEquivalent = [userKeyEquivalent substringFromIndex:1];
|
||||
}
|
||||
else if ([userKeyEquivalent hasPrefix:@"$"])
|
||||
{
|
||||
modifierMask |= NSShiftKeyMask;
|
||||
userKeyEquivalent = [userKeyEquivalent substringFromIndex:1];
|
||||
}
|
||||
else if ([userKeyEquivalent hasPrefix:@"^"])
|
||||
{
|
||||
modifierMask |= NSControlKeyMask;
|
||||
userKeyEquivalent = [userKeyEquivalent substringFromIndex:1];
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
[self setKeyEquivalent:userKeyEquivalent];
|
||||
[self setKeyEquivalentModifierMask:modifierMask];
|
||||
}
|
||||
}
|
||||
|
||||
- (void) setMenu: (NSMenu*)menu
|
||||
{
|
||||
/* The menu is retaining us. Do not retain it. */
|
||||
|
@ -208,6 +252,7 @@ static Class imageClass;
|
|||
return; // no change
|
||||
|
||||
ASSIGNCOPY(_title, aString);
|
||||
[self _updateKeyEquivalent];
|
||||
[_menu itemChanged: self];
|
||||
}
|
||||
|
||||
|
@ -710,6 +755,7 @@ static Class imageClass;
|
|||
}
|
||||
}
|
||||
|
||||
[self _updateKeyEquivalent];
|
||||
return self;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue