discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: gui fixes


From: Fred Kiefer
Subject: Re: gui fixes
Date: Tue, 04 Sep 2007 16:24:40 +0200
User-agent: Thunderbird 1.5.0.12 (X11/20060911)

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.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]