mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-31 23:50:49 +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
d967ad7491
commit
6455999cca
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>
|
2010-06-05 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||||
|
|
||||||
* Source/GSWindowDecorationView.m ([-removeSubview:]): Uncommented
|
* Source/GSWindowDecorationView.m ([-removeSubview:]): Uncommented
|
||||||
|
|
|
@ -134,9 +134,9 @@ static Class imageClass;
|
||||||
return nil;
|
return nil;
|
||||||
|
|
||||||
//_menu = nil;
|
//_menu = nil;
|
||||||
[self setTitle: aString];
|
|
||||||
[self setKeyEquivalent: charCode];
|
[self setKeyEquivalent: charCode];
|
||||||
_keyEquivalentModifierMask = NSCommandKeyMask;
|
_keyEquivalentModifierMask = NSCommandKeyMask;
|
||||||
|
[self setTitle: aString]; // do this AFTER setKeyEquivalent: in case NSUserKeyEquivalents is defined
|
||||||
_mnemonicLocation = 255; // No mnemonic
|
_mnemonicLocation = 255; // No mnemonic
|
||||||
_state = NSOffState;
|
_state = NSOffState;
|
||||||
_enabled = YES;
|
_enabled = YES;
|
||||||
|
@ -151,6 +151,50 @@ static Class imageClass;
|
||||||
return self;
|
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
|
- (void) setMenu: (NSMenu*)menu
|
||||||
{
|
{
|
||||||
/* The menu is retaining us. Do not retain it. */
|
/* The menu is retaining us. Do not retain it. */
|
||||||
|
@ -208,6 +252,7 @@ static Class imageClass;
|
||||||
return; // no change
|
return; // no change
|
||||||
|
|
||||||
ASSIGNCOPY(_title, aString);
|
ASSIGNCOPY(_title, aString);
|
||||||
|
[self _updateKeyEquivalent];
|
||||||
[_menu itemChanged: self];
|
[_menu itemChanged: self];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -710,6 +755,7 @@ static Class imageClass;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[self _updateKeyEquivalent];
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue