RFR: 8355990: [macOS] Restoring a maximized stage does not update the window size

Martin Fox mfox at openjdk.org
Tue Jul 29 14:50:20 UTC 2025


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.

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

Commit messages:
 - Merge remote-tracking branch 'upstream/master' into macmadmax
 - Re-enabled system test
 - Fixed position of maximized transparent windows
 - Merge remote-tracking branch 'upstream/master' into macmadmax
 - Correct restore/maximize notifications, minor cleanup.
 - Cleaned up events when maximizing and restoring the window

Changes: https://git.openjdk.org/jfx/pull/1860/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1860&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8355990
  Stats: 67 lines in 5 files changed: 20 ins; 36 del; 11 mod
  Patch: https://git.openjdk.org/jfx/pull/1860.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1860/head:pull/1860

PR: https://git.openjdk.org/jfx/pull/1860


More information about the openjfx-dev mailing list