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:
Doug Simons 2010-06-08 16:38:30 +00:00
parent 7a98005c86
commit 3b806bf24c
2 changed files with 53 additions and 1 deletions

View file

@ -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

View file

@ -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;
}