When running a JavaFX application on macOS using a JDK compiled with the MacOSX 
10.13 SDK or later, an undecorated or
transparent stage cannot be programmatically minimized (iconified). The reason 
for this failure is that JavaFX only
sets the `NSMiniaturizableWindowMask` bit in the `styleMask` of the `NSWindow` 
for decorated windows. Previous versions
of the MacOSX SDK would minimize and restore a windows regardless of the 
setting of this flag. When the application is
compiled against a newer SDK, Apple honors that flag and prevents the window 
from being minimized.

Note that it is the version of the SDK used to compile the JDK and not the 
version that is used to compile JavaFX that
exposes this bug.

The fix is to temporarily set the `NSMiniaturizableWindowMask` prior to calling 
`miniaturize` or `deminiaturize`, and
restore it afterwards. This seems safer than setting the bit unconditionally 
when the NSWindow is created, which would
have been another approach.

A similar fix was done for AWT. See 
[JDK-8214046](https://bugs.openjdk.java.net/browse/JDK-8214046).

I propose to fix this in JavaFX 15, so it it targeted to the `jfx15` branch.

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

Commit messages:
 - 8248490: [macOS] Undecorated stage does not minimize

Changes: https://git.openjdk.java.net/jfx/pull/264/files
 Webrev: https://webrevs.openjdk.java.net/jfx/264/webrev.00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8248490
  Stats: 135 lines in 2 files changed: 134 ins; 0 del; 1 mod
  Patch: https://git.openjdk.java.net/jfx/pull/264.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/264/head:pull/264

PR: https://git.openjdk.java.net/jfx/pull/264

Reply via email to