<AWT Dev> [9] Review request for 8170386: JLightweightFrame content can miss paint events on Windows

Semyon Sadetsky semyon.sadetsky at oracle.com
Tue Nov 29 17:55:27 UTC 2016

On 11/29/2016 8:11 PM, Sergey Bylokhov wrote:

> On 29.11.16 20:00, Semyon Sadetsky wrote:
>>> From what place the Paint will be posted after the call to
>>> setBounds()? In case of normal native components this event will be
>>> posted from native code after the size of the native component will be
>>> changed. But how it works in case of JLightweightFrame? At least
>>> COMPONENT_MOVED/COMPONENT_RESIZED are posted manually from the
>>> reshape() method, probably we should do the same for the PAIN event as
>>> well? In this case our optimization which coalesce PAINT events will
>>> work and the sequence of setBounds() will produce only one repaint()
>>> action.
>> Paint event is posted on resize and handled as usual in case of
>> JLightweightFrame, but the paint handler does not initiate the real
>> paint when paintPainding is true for optimization purpose because it
>> detects that the consequent paint event has been posted already.
> I doubt how it is possible. If the Paint event was posted from the 
> resize event it will reset the paintPainding to "false" in the 
> WComponentPeer.handleEvent():
>         switch(id) {
>             case PaintEvent.PAINT:
>                 // Got native painting
>                 paintPending = false;
>                 // Fallthrough to next statement
>             case PaintEvent.UPDATE:
> But since the bug exists I assume that this message wasn't posted and 
> this is the reason why all other UPDATE events are skipped.
Update is also a PaintEvent.
Another place that may be affected is endLayout() method which also 
depends on the paintPending flag.

More information about the awt-dev mailing list