diff --git a/ChangeLog b/ChangeLog index d3b6aed32..1cad9bcc3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2012-09-11 00:08-EDT Gregory John Casamento + Merged from the TestPlant brach. Changes by Marcian Llytwyn + + * Headers/AppKit/NSTableView.h: Add _isValidating + * Source/NSCell.m (+initialize): Expose title binding. + * Source/NSOpenPanel.m (-runModal): Use _directory if it is set. + * Source/NSTableView.m (-validateEditing): Check _isValidating to + prevent recursive calls into validateEditing. + * Source/NSTabView.m (-initWithCoder:): Set _selected_item to + NSNotFound. + * Source/NSView.m (-addSubview:): Do not throw an exception when + adding a nil subview, just ignore it. This matches behavior on + Cocoa. + 2012-09-04 Wolfgang Lux * Source/NSSavePanel.m (-ok:): Restore ability to create nested diff --git a/Headers/AppKit/NSTableView.h b/Headers/AppKit/NSTableView.h index 18dd68229..86975e60a 100644 --- a/Headers/AppKit/NSTableView.h +++ b/Headers/AppKit/NSTableView.h @@ -107,6 +107,11 @@ typedef enum _NSTableViewColumnAutoresizingStyle BOOL _verticalMotionDrag; NSArray *_sortDescriptors; + /* + * Ivars Acting as Control... + */ + BOOL _isValidating; + /* * Ivars Acting as Cache */ diff --git a/Source/NSCell.m b/Source/NSCell.m index a7c1876ea..acce736af 100644 --- a/Source/NSCell.m +++ b/Source/NSCell.m @@ -63,6 +63,8 @@ #import "AppKit/NSTextContainer.h" #import "AppKit/NSView.h" #import "AppKit/NSWindow.h" +#import "AppKit/NSKeyValueBinding.h" +#import "GSBindingHelpers.h" #import "GNUstepGUI/GSTheme.h" #import "GSGuiPrivate.h" @@ -116,6 +118,9 @@ static NSColor *dtxtCol; name: NSSystemColorsDidChangeNotification object: nil]; [self _systemColorsChanged: nil]; +#if OS_API_VERSION(GS_API_MACOSX, GS_API_LATEST) + [self exposeBinding: NSTitleBinding]; +#endif } } @@ -216,6 +221,8 @@ static NSColor *dtxtCol; - (void) dealloc { + // Remove all key value bindings for this object. + [GSKeyValueBinding unbindAllForObject: self]; TEST_RELEASE (_contents); TEST_RELEASE (_cell_image); TEST_RELEASE (_font); diff --git a/Source/NSOpenPanel.m b/Source/NSOpenPanel.m index c05c2ee13..a575aab2b 100644 --- a/Source/NSOpenPanel.m +++ b/Source/NSOpenPanel.m @@ -395,7 +395,7 @@ static NSOpenPanel *_gs_gui_open_panel = nil; */ - (NSInteger) runModalForTypes: (NSArray *)fileTypes { - return [self runModalForDirectory: nil + return [self runModalForDirectory: [self directory] file: @"" types: fileTypes]; } diff --git a/Source/NSTabView.m b/Source/NSTabView.m index d380e7fac..6f0c57e28 100644 --- a/Source/NSTabView.m +++ b/Source/NSTabView.m @@ -558,6 +558,8 @@ { self = [super initWithCoder: aDecoder]; + _selected_item = NSNotFound; + if ([aDecoder allowsKeyedCoding]) { if ([aDecoder containsValueForKey: @"NSAllowTruncatedLabels"]) diff --git a/Source/NSTableView.m b/Source/NSTableView.m index 3abcc5a8f..dfde36a76 100644 --- a/Source/NSTableView.m +++ b/Source/NSTableView.m @@ -2007,6 +2007,7 @@ static void computeNewSelection - (void) _initDefaults { + _isValidating = NO; _drawsGrid = YES; _rowHeight = 16.0; _intercellSpacing = NSMakeSize (5.0, 2.0); @@ -3207,13 +3208,16 @@ byExtendingSelection: (BOOL)flag - (void) validateEditing { - if (_textObject) + if (_textObject && (_isValidating == NO)) { NSFormatter *formatter; NSString *string; id newObjectValue = nil; BOOL validatedOK = YES; + // Avoid potential recursive sequences... + _isValidating = YES; + formatter = [_editedCell formatter]; string = AUTORELEASE([[_textObject text] copy]); @@ -3272,6 +3276,9 @@ byExtendingSelection: (BOOL)flag row: _editedRow]; } } + + // Avoid potential recursive sequences... + _isValidating = NO; } } diff --git a/Source/NSView.m b/Source/NSView.m index 4d740bc57..64b8031e0 100644 --- a/Source/NSView.m +++ b/Source/NSView.m @@ -781,8 +781,7 @@ GSSetDragTypes(NSView* obj, NSArray *types) if (aView == nil) { - [NSException raise: NSInvalidArgumentException - format: @"Adding a nil subview"]; + return; } if ([self isDescendantOf: aView]) {