RFR: 8311689: Wrong visible amount in Adjustable of ScrollPane [v2]

Phil Race prr at openjdk.org
Mon Jul 10 20:44:56 UTC 2023


On Mon, 10 Jul 2023 19:27:35 GMT, Alexey Ivanov <aivanov at openjdk.org> wrote:

>> It proved that `ScrollPane.layout` depends on the result of `WScrollPanePeer.childResized`, specifically on `setSpans` which recalculates the spans and sets the insets.
>> 
>> https://github.com/openjdk/jdk/blob/b285ed72aebe2d802fa9c071372cea6c09870b9a/src/java.desktop/share/classes/java/awt/ScrollPane.java#L514-L521
>> 
>> After the fix for [JDK-8297923](https://bugs.openjdk.org/browse/JDK-8297923), `setSpans` that is called in `childResized` is run asynchronously on the toolkit thread. Therefore `getViewportSize` uses the wrong insets which don't take into account the size of the scroll bar. Because of it, the `visibleAmount` field of adjustables is also wrong, and the scroll pane cannot display a portion of its child component.
>> 
>> I overlooked this dependency even when I was fixing the first regression, [JDK-8310054](https://bugs.openjdk.org/browse/JDK-8310054). Had I followed Harshitha's advice in #14478, I would've fixed this problem too. Similarly, Phil's intuition was right: `setSpans` should be synchronous. @honkar-jdk @prrace
>> 
>> **Fix**
>> 
>> The fix is to run `AwtScrollPane::_SetSpans` synchronously using `AwtToolkit::InvokeFunction`.
>> 
>> I also addressed [Sergey's concern](https://github.com/openjdk/jdk/pull/14478#discussion_r1239049983): `VerifyState` is now called after `SetInsets`. @mrserb
>> 
>> Client tests are green.
>
> Alexey Ivanov has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Add Robot.waitForIdle
>   
>   It ensures getViewportSize in the test is called
>   after AwtScrollPane::_SetSpans completes on the
>   toolkit thread.

Marked as reviewed by prr (Reviewer).

-------------

PR Review: https://git.openjdk.org/jdk/pull/14815#pullrequestreview-1523010261



More information about the client-libs-dev mailing list