[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.