mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-09-14 22:51:28 +00:00
Make the window perform it's defaults button's key equivalent after the default keyDown messages are handled
This commit is contained in:
@@ -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
@@ -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];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user