Make the window perform it's defaults button's key equivalent after the default keyDown messages are handled

This commit is contained in:
Klaas Pieter Annema
2010-06-16 14:17:58 +02:00
parent eaf4fa240f
commit f40fc321fe
2 changed files with 37 additions and 11 deletions
+20
View File
@@ -569,9 +569,25 @@ CPButtonStateMixed = CPThemeState("mixed");
*/
- (void)setKeyEquivalent:(CPString)aString
{
// Check if the key equivalent is the enter key
// Treat \r and \n as the same key equivalent. See issue #710.
if (aString === CPNewlineCharacter || aString === CPCarriageReturnCharacter)
[[self window] setDefaultButton:self];
else if ([[self window] defaultButton] === self)
[[self window] setDefaultButton:NO];
_keyEquivalent = aString || @"";
}
- (void)viewWillMoveToWindow:(CPWindow)aWindow
{
if ([[self window] defaultButton] === self)
[[self window] setDefaultButton:nil];
if ([self keyEquivalent] === CPNewlineCharacter || [self keyEquivalent] === CPCarriageReturnCharacter)
[aWindow setDefaultButton:self];
}
/*!
Returns the keyboard shortcut for this button.
*/
@@ -602,6 +618,10 @@ CPButtonStateMixed = CPThemeState("mixed");
*/
- (BOOL)performKeyEquivalent:(CPEvent)anEvent
{
// Don't handle the key equivalent for the default window because the window will handle it for us
if ([[self window] defaultButton] === self)
return NO;
if (![anEvent _triggersKeyEquivalent:[self keyEquivalent] withModifierMask:[self keyEquivalentModifierMask]])
return NO;
+17 -11
View File
@@ -1377,7 +1377,15 @@ CPTexturedBackgroundWindowMask
switch (type)
{
case CPKeyUp: return [[self firstResponder] keyUp:anEvent];
case CPKeyDown: return [[self firstResponder] keyDown:anEvent];
case CPKeyDown: [[self firstResponder] keyDown:anEvent];
// Trigger the default button if needed
if (![self disableKeyEquivalentForDefaultButton])
if ([anEvent _triggersKeyEquivalent:[[self defaultButton] keyEquivalent] withModifierMask:[[self defaultButton] keyEquivalentModifierMask]])
[[self defaultButton] performClick:self];
return;
case CPScrollWheel: return [[_windowView hitTest:point] scrollWheel:anEvent];
@@ -2250,7 +2258,7 @@ CPTexturedBackgroundWindowMask
return NO;
}
- (void)performKeyEquivalent:(CPEvent)anEvent
- (BOOL)performKeyEquivalent:(CPEvent)anEvent
{
// FIXME: should we be starting at the root, in other words _windowView?
// The evidence seems to point to no...
@@ -2261,14 +2269,11 @@ CPTexturedBackgroundWindowMask
{
// It's not clear why we do performKeyEquivalent again here...
// Perhaps to allow something to happen between sendEvent: and keyDown:?
if (![anEvent _couldBeKeyEquivalent] || ![self performKeyEquivalent:anEvent])
[self interpretKeyEvents:[anEvent]];
}
if ([anEvent _couldBeKeyEquivalent] && [self performKeyEquivalent:anEvent])
return;
- (void)insertNewline:(id)sender
{
if (_defaultButton && _defaultButtonEnabled)
[_defaultButton performClick:nil];
// Interpret the key events
[self interpretKeyEvents:[anEvent]];
}
- (void)insertTab:(id)sender
@@ -2381,10 +2386,11 @@ CPTexturedBackgroundWindowMask
- (void)setDefaultButton:(CPButton)aButton
{
if (_defaultButton === aButton)
return;
[_defaultButton setDefaultButton:NO];
_defaultButton = aButton;
[_defaultButton setDefaultButton:YES];
}