On Wed, 8 Oct 2025 18:17:11 GMT, Kevin Rushforth <[email protected]> wrote:
>> This PR fixes the bug where owned stage will disappear on macOS if it is >> moved to another screen with the Mission Control setting of "Displays have >> separate spaces" enabled (which it is by default). >> >> We fix this by managing owned windows ourself in glass rather than relying >> on NSWindow's childWindow feature, which we currently do. This matches what >> AWT does. >> >> ### Notes to reviewers: >> >> The following changes are implemented: >> >> * Each GlassWindow keeps a list of owned (child) windows. A window with an >> owner adds itself to its owner's list of child windows when created and >> removes itself when closed >> * A new `reorderChildWindows` method is created to stack each child window >> above its owner, setting the level to be at least the same as its owner (to >> handle the case of an owned window of an always-on-top owner window). We >> call `reorderChildWindows` in various places that can alter the window >> stacking order, so we can preserve the desired order. >> * When an owner window is closed, all child windows are recursively closed. >> * When an owner window is iconified / deiconified, all child windows are >> recursively iconified / deiconified. >> * When an owner window enters full screen, it recursively sets the >> `NSWindowCollectionBehaviorMoveToActiveSpace` behavior to temporarily enable >> moving the child window to the active space >> >> Testing: >> >> * Most of the testing can be done on a single screen, but you will need 2 >> screens to reproduce the bug by dragging an owned window from one screen to >> another (and verify that it is fixed) >> * You can use the updated HelloModality test app to test this. It already >> had most of what was needed to test the various combinations; I added the >> ability to create / toggle the alwaysOnTop property of a Stage and the >> ability to initially create a stage on a secondary screen. I also added >> tooltips, which are implemented using owned popup windows. >> * MonkeyTester also has some dialog tests that can be used to verify the >> behavior >> >> NOTE: dragging an owner window no longer causes all child windows to move in >> lock step; this means that owned windows will now works more like it does on >> the Windows platform. > > Kevin Rushforth has updated the pull request with a new target base due to a > merge or a rebase. The incremental webrev excludes the unrelated changes > brought in by the merge/rebase. The pull request contains three additional > commits since the last revision: > > - Merge branch 'master' into 8252373-mac-dual-screen-owned-stage > - Remove or comment out log messages > - 8252373: [macOS] Stage with owner disappears when moved to another screen Notice to testers/reviewers: I've updated the Stage Page in the Monkey Tester to cover additional initialization options such as placing the newly created stage outside of any Screen. https://github.com/andy-goryachev-oracle/MonkeyTest ------------- PR Comment: https://git.openjdk.org/jfx/pull/1932#issuecomment-3387249991
