On Thu, 12 Oct 2023 05:52:04 GMT, Martin Fox <[email protected]> wrote:
> When a window is visible the maximized, iconified, and fullscreen properties
> are two-way streets; changes made in Java are sent on to the platform window
> and changes in the platform window are sent back into Java.
>
> When a window is hidden these properties (and others, like location and
> sizing information) are not sent on to the platform window until the window
> is made visible. In other words, the properties don't reflect the actual
> state of the window but the intended state after it's shown.
>
> There's a period when the window is transitioning from hidden to shown where
> the core Stage code is using the stored properties to configure the platform
> window and the platform window is simultaneously calling back in to update
> the properties. This was causing the intended state to be wiped out before it
> could be sent on to the platform window.
>
> The problem is specific to Mac because on that platform any change to the
> size or location of a window can cause it to enter or leave the maximized
> (zoomed) state. So just setting the location can cause the maximized flag to
> be altered.
>
> The proposed solution is to copy the intended state bits to Stage local
> variables to be used later in the configuration.
This change causes a regression on Windows, test
`MaximizeUndecorated.testMaximized` starts failing:
MaximizeUndecorated > testMaximize FAILED
java.lang.AssertionError: Stage has moved to desktop top corner
at org.junit.Assert.fail(Assert.java:89)
at org.junit.Assert.assertTrue(Assert.java:42)
at
test.javafx.stage.MaximizeUndecorated.testMaximize(MaximizeUndecorated.java:85)
-------------
PR Review: https://git.openjdk.org/jfx/pull/1258#pullrequestreview-1684543878