From 19b53746cfbc0d2cd208d0c9774c1c8f24c0dd32 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Fri, 15 Jun 2012 20:11:23 +0100 Subject: [PATCH] Fix nil `representedObjectForEditingString:` response handling. If `tokenField: representedObjectForEditingString:` returns nil, act the same as if the delegate method didn't exist. This matches Cocoa. --- AppKit/CPTokenField.j | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/AppKit/CPTokenField.j b/AppKit/CPTokenField.j index 5d573046e..943d593b0 100755 --- a/AppKit/CPTokenField.j +++ b/AppKit/CPTokenField.j @@ -1133,24 +1133,25 @@ var CPScrollDestinationNone = 0, The delegate method should return a represented object for the provided string which may have been typed by the user or selected from the completion menu. If the method is - not implemented, the string is assumed to be the represented object. + not implemented, or returns nil, the string is assumed to be the represented object. @ignore */ - (id)_representedObjectForEditingString:(CPString)aString { - var delegate = [self delegate]; + var delegate = [self delegate]; if ([delegate respondsToSelector:@selector(tokenField:representedObjectForEditingString:)]) - return [delegate tokenField:self representedObjectForEditingString:aString]; + { + var token = [delegate tokenField:self representedObjectForEditingString:aString]; + if (token !== nil && token !== undefined) + return token; + // If nil was returned, assume the string is the represented object. The alternative would have been + // to not add anything to the object value array for a nil response. + } return aString; } -// -// If you return nil or don't implement these delegate methods, we will assume -// editing string = display string = represented object -// - (NSString *)tokenField:(NSTokenField *)tokenField editingStringForRepresentedObject:(id)representedObject; -// // We put the string on the pasteboard before calling this delegate method. // By default, we write the NSStringPboardType as well as an array of NSStrings. // - (BOOL)tokenField:(NSTokenField *)tokenField writeRepresentedObjects:(NSArray *)objects toPasteboard:(NSPasteboard *)pboard;