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:44:53 PST 2012


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)?

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(). 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