On Tue, 17 Jun 2025 00:41:54 GMT, Michael Strauß <mstra...@openjdk.org> 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:
> 
>   small refactor

JavaFX modal windows are not native modals, as evidenced by the code removal on 
this PR (it's not used) . On GNOME,  native modal windows automatically remove 
the minimize and maximize buttons. 

![image](https://github.com/user-attachments/assets/5c5935dd-b8db-43b7-8a5e-2459bd2fc1e9)

I did an experiment and found that it's possible to get native modal windows 
(at least with GTK Glass) by passing the modality flag from `WindowStage` to 
`createWindow`. I haven’t done extensive testing, but it seems to work - likely 
because the modality can’t be changed afterward.

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

PR Comment: https://git.openjdk.org/jfx/pull/1831#issuecomment-2986109841

Reply via email to