On Thu, 31 Jul 2025 15:05:20 GMT, Martin Fox <m...@openjdk.org> wrote:

>> This PR fixes numerous bugs in the handling of setMaximized() on macOS and 
>> also cleans up some issues seen when the user changes the maximized state 
>> manually.
>> 
>> - After setMaximized(false) a notifyResize event was never sent so the width 
>> and height tracked by JavaFX was wrong.
>> 
>> - During maximize and restore a series of notifyMove events were issued 
>> causing the maximized property to flip-flop during the animation.
>> 
>> - Transparent windows were being maximized by passing native screen 
>> coordinates to a routine that expected JavaFX screen coordinates so the Y 
>> axis was flipped and the window was positioned incorrectly.
>> 
>> - The restored frame is in native screen coordinates which was sent to a 
>> routine that expected flipped JavaFX coordinates. That routine corrected 
>> this by directly inspecting the call stack to see which routine was calling 
>> it.
>> 
>> - When the user maximizes or restores the window a notifyResize event was 
>> always sent immediately stating that the window was maximized even when it 
>> was not. Then a series of notifyMove events were issued causing the 
>> maximized flag to flip-flop during the animation.
>> 
>> This PR cleans all of this up. When using the setMaximized API only one 
>> notifyMove and one notifyResize event are sent and transparent windows are 
>> positioned correctly. When the user maximizes or restores manually we still 
>> see a series of notifyMove and notifyResize events but at least they all 
>> report the window’s state correctly.
>> 
>> System tests are currently being written as part of #1789. It’s hard to 
>> create a system test that catches things like the mis-alignment of maximized 
>> transparent windows so that needs to be tested manually. The reproducer 
>> attached to the bug report can be used to verify this and also to see what 
>> happens when the user toggles the maximization state manually.
>> 
>> Note that when the test programs tags something as “unexpected” it just 
>> means it saw a property change outside of any JavaFX API call. This is 
>> actually expected if the user manipulates the window manually.
>
> Martin Fox has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Cleaned up diff against master. Tighted up system test (tested on Windows 
> and Linux)

I did some initial testing and ran a headful test through our CI system and it 
looks good. I left one comment on the test and will review the native glass 
code changes next.

tests/system/src/test/java/test/javafx/stage/RestoreStagePositionTest.java line 
130:

> 128: 
> 129:         Util.runAndWait(() -> stage.setMaximized(true));
> 130:         Util.waitForIdle(stage.getScene());

I know that @andy-goryachev-oracle suggested its use, but for tests that do 
various windowing operations (maximize, full screen, restore, etc), 
`waitForIdle` is too short (its on the order of 160 msec). To make the test 
more robust, I recommend reverting this back to the `sleep(800)` you had 
earlier.

Arguably, we should have a utility method for this sort of "wait for windowing 
changes to settle down", but we don't.

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

PR Review: https://git.openjdk.org/jfx/pull/1860#pullrequestreview-3092704505
PR Review Comment: https://git.openjdk.org/jfx/pull/1860#discussion_r2257246639

Reply via email to