On Sat, 21 Jun 2025 23:37:13 GMT, Michael Strauß <[email protected]> wrote:
>> The window button states (disabled/hidden) of extended stages with a
>> `HeaderButtonOverlay` or custom header buttons are inconsistent with what we
>> would expect from the OS (Windows and Linux). To figure out what we would
>> expect, I started with gathering some data. The following table shows the
>> button states of system-decorated windows on various platforms:
>>
>> #### Windows 11
>>
>> | Window attributes | Iconify | Maximize | Close |
>> |---|---|---|---|
>> | resizable, not modal | visible | visible | visible |
>> | not resizable, not modal | visible | visible, disabled | visible |
>> | resizable, modal | visible, disabled | visible | visible |
>> | not resizable, modal | hidden | hidden | visible, utility-style |
>>
>> #### Ubuntu 24 / Fedora 41 (GNOME)
>>
>> | Window attributes | Iconify | Maximize | Close |
>> |---|---|---|---|
>> | resizable, not modal | visible | visible | visible |
>> | not resizable, not modal | visible | hidden | visible |
>> | resizable, modal | visible, _not working_ | visible, _not working_ |
>> visible |
>> | not resizable, modal | visible, _not working_ | hidden | visible |
>>
>> #### Kubuntu 24 (KDE)
>>
>> | Window attributes | Iconify | Maximize | Close |
>> |---|---|---|---|
>> | resizable, not modal | visible | visible | visible |
>> | not resizable, not modal | visible | hidden | visible |
>> | resizable, modal | visible, _not working_ | visible | visible |
>> | not resizable, modal | visible, _not working_ | hidden | visible |
>>
>> ## Observations
>>
>> 1. On Windows, buttons are generally disabled when their operation is not
>> possible with the given window attributes.
>> * Exception: modal/non-resizable windows look like utility windows
>> (iconify and maximize are hidden)
>> 2. On GNOME and KDE, buttons are generally hidden when their operation is
>> not possible.
>> * Exception: iconify and maximize on modal windows is not hidden, but
>> seems to simply not do anything (bug?)
>>
>> ## Permitted window button operations
>>
>> Given the gathered observations and some simple logic, this is the table of
>> operations that are permitted for all combinations of modal and resizable
>> window attributes:
>>
>> | Window attributes | Iconify | Maximize | Close |
>> |---|---|---|---|
>> | resizable, not modal | yes | yes | yes |
>> | not resizable, not modal | yes | no | yes |
>> | resizable, modal | no | yes | yes |
>> | not resizable, modal | no | no | yes |
>>
>> ## Fixes
>>
>> This PR includes the following changes:
>> 1. Unused code relating to window modality is removed...
>
> Michael Strauß has updated the pull request incrementally with one additional
> commit since the last revision:
>
> fix resizable state of macOS window
modules/javafx.graphics/src/main/java/com/sun/javafx/scene/layout/HeaderButtonBehavior.java
line 73:
> 71:
> 72: if (type == HeaderButtonType.MAXIMIZE) {
> 73: subscription = Subscription.combine(subscription,
here and on L66 the `subscription` pointer (set in L61) gets overwritten. does
it mean some subscription(s) won't be cancelled in `dispose()`?
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1831#discussion_r2226122084