Trigger the action of NSButton and NSPopUpButton in their keyDown

method only for the Space key.
Fix key view loop of NSAlert panels and NSSavePanel so that all
buttons become reachable with the Tab key.
Make Escape key equivalent of the Cancel button of NSSavePanel.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@27011 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
wlux 2008-11-05 23:01:37 +00:00
parent 4b6d5a490a
commit 2282372272
4 changed files with 12 additions and 13 deletions

View file

@ -431,12 +431,9 @@ setControl(NSView* content, id control, NSString *title)
[defButton setImagePosition: NSImageRight]; [defButton setImagePosition: NSImageRight];
[defButton setImage: [NSImage imageNamed: @"common_ret"]]; [defButton setImage: [NSImage imageNamed: @"common_ret"]];
[defButton setAlternateImage: [NSImage imageNamed: @"common_retH"]]; [defButton setAlternateImage: [NSImage imageNamed: @"common_retH"]];
[defButton setRefusesFirstResponder: YES];
altButton = [self _makeButtonWithRect: rect]; altButton = [self _makeButtonWithRect: rect];
[altButton setRefusesFirstResponder: YES];
othButton = [self _makeButtonWithRect: rect]; othButton = [self _makeButtonWithRect: rect];
[othButton setRefusesFirstResponder: YES];
rect.size.height = 80.0; rect.size.height = 80.0;
scroll = makeScrollViewWithRect(rect); scroll = makeScrollViewWithRect(rect);

View file

@ -482,11 +482,8 @@ static id buttonCellClass = nil;
character = [characters characterAtIndex: 0]; character = [characters characterAtIndex: 0];
} }
// Handle SPACE or RETURN to perform a click /* Handle SPACE to perform a click */
if ((character == NSNewlineCharacter) if ([characters isEqualToString: @" "])
|| (character == NSEnterCharacter)
|| (character == NSCarriageReturnCharacter)
|| ([characters isEqualToString: @" "]))
{ {
[self performClick: self]; [self performClick: self];
return; return;

View file

@ -468,6 +468,14 @@ this to return nil to indicate that we have no context menu.
case NSNewlineCharacter: case NSNewlineCharacter:
case NSEnterCharacter: case NSEnterCharacter:
case NSCarriageReturnCharacter: case NSCarriageReturnCharacter:
/* Handle Enter and Return keys only when the menu is visible.
The button's action to pop up the menu is initiated only by
the Space key similar to other buttons. */
{
NSMenuView *menuView = [[_cell menu] menuRepresentation];
if ([[menuView window] isVisible] == NO)
break;
}
case ' ': case ' ':
{ {
int selectedIndex; int selectedIndex;

View file

@ -249,7 +249,6 @@ setPath(NSBrowser *browser, NSString *path)
r = NSMakeRect (43, 6, 27, 27); r = NSMakeRect (43, 6, 27, 27);
button = [[NSButton alloc] initWithFrame: r]; button = [[NSButton alloc] initWithFrame: r];
[button setRefusesFirstResponder: YES];
[button setBordered: YES]; [button setBordered: YES];
image = [NSImage imageNamed: @"common_Home"]; image = [NSImage imageNamed: @"common_Home"];
[button setImage: image]; [button setImage: image];
@ -265,7 +264,6 @@ setPath(NSBrowser *browser, NSString *path)
r = NSMakeRect (78, 6, 27, 27); r = NSMakeRect (78, 6, 27, 27);
button = [[NSButton alloc] initWithFrame: r]; button = [[NSButton alloc] initWithFrame: r];
[button setRefusesFirstResponder: YES];
[button setBordered: YES]; [button setBordered: YES];
image = [NSImage imageNamed: @"common_Mount"]; image = [NSImage imageNamed: @"common_Mount"];
[button setImage: image]; [button setImage: image];
@ -281,7 +279,6 @@ setPath(NSBrowser *browser, NSString *path)
r = NSMakeRect (112, 6, 27, 27); r = NSMakeRect (112, 6, 27, 27);
button = [[NSButton alloc] initWithFrame: r]; button = [[NSButton alloc] initWithFrame: r];
[button setRefusesFirstResponder: YES];
[button setBordered: YES]; [button setBordered: YES];
image = [NSImage imageNamed: @"common_Unmount"]; image = [NSImage imageNamed: @"common_Unmount"];
[button setImage: image]; [button setImage: image];
@ -297,7 +294,6 @@ setPath(NSBrowser *browser, NSString *path)
r = NSMakeRect (148, 6, 71, 27); r = NSMakeRect (148, 6, 71, 27);
button = [[NSButton alloc] initWithFrame: r]; button = [[NSButton alloc] initWithFrame: r];
[button setRefusesFirstResponder: YES];
[button setBordered: YES]; [button setBordered: YES];
[button setTitle: @"Cancel"]; [button setTitle: @"Cancel"];
[button setImagePosition: NSNoImage]; [button setImagePosition: NSNoImage];
@ -305,6 +301,8 @@ setPath(NSBrowser *browser, NSString *path)
[button setAction: @selector(cancel:)]; [button setAction: @selector(cancel:)];
[button setAutoresizingMask: NSViewMinXMargin]; [button setAutoresizingMask: NSViewMinXMargin];
[button setTag: NSFileHandlingPanelCancelButton]; [button setTag: NSFileHandlingPanelCancelButton];
[button setKeyEquivalent: @"\e"];
[button setKeyEquivalentModifierMask: 0];
[_bottomView addSubview: button]; [_bottomView addSubview: button];
[lastKeyView setNextKeyView: button]; [lastKeyView setNextKeyView: button];
lastKeyView = button; lastKeyView = button;
@ -312,7 +310,6 @@ setPath(NSBrowser *browser, NSString *path)
r = NSMakeRect (228, 6, 71, 27); r = NSMakeRect (228, 6, 71, 27);
_okButton = [[NSButton alloc] initWithFrame: r]; _okButton = [[NSButton alloc] initWithFrame: r];
[button setRefusesFirstResponder: YES];
[_okButton setBordered: YES]; [_okButton setBordered: YES];
[_okButton setTitle: @"OK"]; [_okButton setTitle: @"OK"];
[_okButton setImagePosition: NSImageRight]; [_okButton setImagePosition: NSImageRight];