Andreas Höschler wrote:
>>> I removed the above hack and instead implemented the following in
>>>  NSCell.
>>> 
>>> - (NSAttributedString*) attributedStringValue { if (_formatter !=
>>> nil) { NSDictionary *attributes; NSAttributedString *attrStr;
>>> 
>>> +      SEL sel = @selector(validateEditing); +      if ([[self
>>> controlView] respondsToSelector:sel]) [[self controlView]
>>> performSelector:sel];
>>> 
>>> attributes = [self _nonAutoreleasedTypingAttributes]; attrStr =
>>> [_formatter attributedStringForObjectValue: _object_value 
>>> withDefaultAttributes: attributes]; ... }
>>> 
>>> - (id)objectValue { +   SEL sel = @selector(validateEditing); +
>>> if ([[self controlView] respondsToSelector:sel]) [[self
>>> controlView] performSelector:sel]; if
>>> (_cell.has_valid_object_value) { return _object_value; } else { 
>>> return nil; } }
>>> 
>>> This solves the problem as well and is probably less hackish. Any
>>>  objections?
>>> 
>>> Regards,
>>> 
>>> Andreas
>>> 
>> 
>> Fixed in a similar way in SVN.
> 
> In the meanwhile I figured out that the addition of the two lines
> above in attributedStringValue: generates a loop. One at least should
> check whether object value is invalid and perform them only in that
> case (once).
> 

I used the following two methods on NSActionCell in my patch. Couls you
please check, whether they also result in a loop?

- (id)objectValue
{
  if (_control_view)
    if ([_control_view isKindOfClass: controlClass])
      [(NSControl *)_control_view validateEditing];
  return [super objectValue];
}

/**
 * Retrieve the value of the receiver as an NSAttributedString.
 */
- (NSAttributedString*)attributedStringValue
{
  if (_control_view)
    if ([_control_view isKindOfClass: controlClass])
      [(NSControl *)_control_view validateEditing];
  return [super attributedStringValue];
}

Even for your code, I don't see how this could result in a loop.



_______________________________________________
Discuss-gnustep mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/discuss-gnustep

Reply via email to