Request for review: 7130587 - [macosx] Scrolling and painting issues with late invocation of setText

Anthony Petrov anthony.petrov at oracle.com
Wed Jan 25 04:59:38 PST 2012


Ah, I missed that part that getTextComponent() actually returns our 
internal Swing text component, not the target. Thanks for clarifying that.

I'm fine with the fix then.

--
best regards,
Anthony

On 1/25/2012 4:55 PM, Sergey Bylokhov wrote:
> 25.01.2012 16:44, Anthony Petrov wrote:
>> Hi Sergey,
>>
>> I'd like to clarify the logic behind invalidating/validating parts of 
>> component hierarchies.
>>
>> src/macosx/classes/sun/lwawt/LWTextComponentPeer.java
>>>  177     protected final void revalidate() {
>>>  178         synchronized (getDelegateLock()) {
>>>  179             getTextComponent().invalidate();
>>>  180             getDelegate().validate();
>>>  181         }
>>>  182     }
>>
>> Here we're actually dealing with two different, unrelated component 
>> hierarchies:
>>
>> 1. The real, user's hierarchy: the text component belongs to it. We're 
>> calling invalidate() for this real, AWT component which results in 
>> invalidating the component and its ancestors. Do I understand 
>> correctly that user's code is responsible for validating their 
>> components back after each setText()/insert()/etc calls? Is this how a 
>> HW AWT hierarchy behaves (e.g. on Win and X11)?
> No, we invalidate internal delegate(JScrollPane) starting from its child 
> TextComponent(JTextArea).
>>
>> 2. Our internal, not visible to the user hierarchy: the delegate Swing 
>> component belongs to this hierarchy. We're only calling validate() for 
>> it assuming that it's been invalidated somewhere else already. Is this 
>> correct?
>> Before we did invalidate it explicitly with a call to 
>> getDelegate().invalidate() in sendTextEvent().
> For textfield nothing changed because getTextComponent() returns 
> delegate. For textarea we start invalidating from the child(JTextArea) 
> of our delegate(JScrollPane)
>> Would it make sense to add a call to getDelegate().invalidate() before 
>> calling its validate() in LWTextComponentPeer.revalidate() to make 
>> sure the validate() isn't a no-op?
>>
>> -- 
>> best regards,
>> Anthony
>>
>> On 1/25/2012 4:18 PM, Sergey Bylokhov wrote:
>>> Hi Everyone,
>>> We should invalidate text component, when its state changed and then 
>>> we should validate its container.
>>>
>>> Bug: http://monaco.sfbay.sun.com/detail.jsf?cr=7130587
>>> Webrev can be found 
>>> at:http://cr.openjdk.java.net/~serb/7130587/webrev.00/
>>>
> 
> 


More information about the macosx-port-dev mailing list