From ad9ddfe0ea430d19903f52c780e88f0b6270e21d Mon Sep 17 00:00:00 2001 From: Fred Kiefer Date: Sun, 25 Jul 2010 20:51:40 +0000 Subject: [PATCH] Add support for backtab character. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@31026 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 7 +++++++ Source/NSBrowser.m | 4 +++- Source/NSInputManager.m | 7 ++++++- Source/NSMatrix.m | 11 ++++++++++- Source/NSWindow.m | 7 +++++++ 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2838ea923..706b14cd1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2010-07-25 Fred Kiefer + + * Source/NSBrowser.m, + * Source/NSInputManager.m, + * Source/NSMatrix.m, + * Source/NSWindow.m: Add support for backtab character. + 2010-07-22 19:35-EDT Gregory John Casamento * Source/GSTheme.m: Call method _setArchiveByName: with YES so that diff --git a/Source/NSBrowser.m b/Source/NSBrowser.m index 3d586c15a..bfea0c4dc 100644 --- a/Source/NSBrowser.m +++ b/Source/NSBrowser.m @@ -2517,6 +2517,9 @@ static NSTextFieldCell *titleCell; case NSRightArrowFunctionKey: [self moveRight:self]; return; + case NSBackTabCharacter: + [_window selectKeyViewPrecedingView: self]; + return; case NSTabCharacter: { if ([theEvent modifierFlags] & NSShiftKeyMask) @@ -2529,7 +2532,6 @@ static NSTextFieldCell *titleCell; } } return; - break; } } diff --git a/Source/NSInputManager.m b/Source/NSInputManager.m index b492a6e18..725e7d859 100644 --- a/Source/NSInputManager.m +++ b/Source/NSInputManager.m @@ -39,7 +39,7 @@ /* A table mapping character names to characters, used to interpret the character names found in KeyBindings dictionaries. */ -#define CHARACTER_TABLE_SIZE 77 +#define CHARACTER_TABLE_SIZE 78 static struct { @@ -125,6 +125,7 @@ character_table[CHARACTER_TABLE_SIZE] = /* Special characters by name. Useful if you want, for example, to associate some special action to C-Tab or similar evils. */ { @"Backspace", NSBackspaceCharacter }, + { @"BackTab", NSBackTabCharacter }, { @"Tab", NSTabCharacter }, { @"Enter", NSEnterCharacter }, { @"FormFeed", NSFormFeedCharacter }, @@ -654,6 +655,10 @@ static NSInputManager *currentInputManager = nil; [self doCommandBySelector: @selector (cancelOperation:)]; break; + case NSBackTabCharacter: + [self doCommandBySelector: @selector (insertBacktab:)]; + break; + case NSTabCharacter: if (flags & NSShiftKeyMask) { diff --git a/Source/NSMatrix.m b/Source/NSMatrix.m index de7aa27cf..e92ba44b2 100644 --- a/Source/NSMatrix.m +++ b/Source/NSMatrix.m @@ -2585,7 +2585,7 @@ static SEL getSel; unsigned int modifiers = [theEvent modifierFlags]; int i; unsigned int relevantModifiersMask = NSCommandKeyMask | NSAlternateKeyMask | NSControlKeyMask; - unichar key = ([keyEquivalent length] > 0 ? [keyEquivalent characterAtIndex:0] : 0); + /* Take shift key into account only for control keys and arrow and function keys */ if ((modifiers & NSFunctionKeyMask) || ([keyEquivalent length] > 0 && [[NSCharacterSet controlCharacterSet] characterIsMember:[keyEquivalent characterAtIndex:0]])) @@ -3727,6 +3727,15 @@ static SEL getSel; } return; + case NSBackTabCharacter: + if (_tabKeyTraversesCells) + { + if ([self _selectNextSelectableCellAfterRow: _selectedRow + column: _selectedColumn]) + return; + } + break; + case NSTabCharacter: if (_tabKeyTraversesCells) { diff --git a/Source/NSWindow.m b/Source/NSWindow.m index 15f1b6231..6677348d5 100644 --- a/Source/NSWindow.m +++ b/Source/NSWindow.m @@ -3218,6 +3218,13 @@ resetCursorRectsForView(NSView *theView) return; } + // If this is a BACKTAB event, move to the previous key view + if (character == NSTabCharacter) + { + [self selectPreviousKeyView: self]; + return; + } + // If this is a TAB or TAB+SHIFT event, move to the next key view if (character == NSTabCharacter) {