RFR: 8362091: Window title bar should reflect scene color scheme [v3]
Christopher Schnick
crschnick at xpipe.io
Tue Dec 30 16:49:45 UTC 2025
Also, looking at the setDarkFrame method in a debugger, it seems like it
is called whenever a popup window is created as well. Is that necessary?
Seems kinda pointless to call it for Windows that don't have frames.
On 30/12/2025 5:35 PM, Christopher Schnick wrote:
> We bumped the release version of our JavaFX dependency to the latest
> ea, so it includes this feature now. I received an anonymous error
> report (so no details or log) about this error occuring on a Windows
> 11 system:
>
> java.lang.UnsatisfiedLinkError:
> at com.sun.glass.ui.win.WinWindow._setDarkFrame(WinWindow.java)
> at com.sun.glass.ui.win.WinWindow.setDarkFrame(WinWindow.java:287)
> at
> com.sun.javafx.tk.quantum.WindowStage.setDarkFrame(WindowStage.java:919)
> at javafx.stage.Window$SceneModel.updateDarkFrame(Window.java:899)
> at
> com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:192)
> at
> com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:91)
> at
> javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:106)
> at
> com.sun.javafx.beans.property.NullCoalescingPropertyBase.fireValueChangedEvent(NullCoalescingPropertyBase.java:88)
> at
> com.sun.javafx.beans.property.NullCoalescingPropertyBase.lambda$new$0(NullCoalescingPropertyBase.java:44)
> at
> javafx.beans.value.WeakChangeListener.changed(WeakChangeListener.java:86)
> at
> com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:386)
> at
> com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:91)
> at
> javafx.beans.property.ReadOnlyObjectPropertyBase.fireValueChangedEvent(ReadOnlyObjectPropertyBase.java:80)
> at
> com.sun.javafx.application.preferences.PreferenceProperties$ColorSchemeProperty.fireValueChangeIfNecessary(PreferenceProperties.java:327)
> at
> com.sun.javafx.application.preferences.PreferenceProperties.update(PreferenceProperties.java:187)
> at
> com.sun.javafx.application.preferences.PlatformPreferences.update(PlatformPreferences.java:308)
> at
> com.sun.javafx.application.PlatformImpl.updatePreferences(PlatformImpl.java:951)
> at
> com.sun.javafx.tk.quantum.QuantumToolkit$2.handlePreferencesChanged(QuantumToolkit.java:374)
> at
> com.sun.glass.ui.Application.notifyPreferencesChanged(Application.java:261)
> at com.sun.glass.ui.win.WinApplication._runLoop(WinApplication.java)
> at
> com.sun.glass.ui.win.WinApplication.lambda$runLoop$0(WinApplication.java:168)
> at java.lang.Thread.run(Thread.java:1474)
>
> Maybe someone is using it a weird distribution of Windows 11 that you
> typically don't find with end users. I sadly don't have any system
> details. But in general it would be good if such an Error is caught
> and handled properly. Because right now it is not caught anywhere.
>
> On 02/10/2025 10:43 PM, Marius Hanl wrote:
>> On Tue, 30 Sep 2025 20:08:55 GMT, Michael Strauß
>> <mstrauss at openjdk.org> wrote:
>>
>>>> Currently, the color scheme of a system-decorated stage is as follows:
>>>> * On Windows, the title bar is always light (even if the OS color
>>>> scheme is dark).
>>>> * On macOS and Linux, the title bar is light or dark depending on
>>>> the OS color scheme.
>>>>
>>>> The expected behavior is that the title bar matches the color
>>>> scheme of the `Scene`.
>>>> If an application doesn't specify a color scheme, the title bar
>>>> color should match the OS color scheme.
>>>>
>>>> This PR fixes the behavior for Windows and macOS, but not for Linux
>>>> (there's no good way to do that).
>>>> Depending on how you look at it, this is either a bug fix or an
>>>> enhancement.
>>> Michael Strauß has updated the pull request with a new target base
>>> due to a merge or a rebase. The pull request now contains four commits:
>>>
>>> - explicitly use wide string functions
>>> - Merge branch 'master' into feature/dark-window-frame
>>> - Merge branch 'master' into feature/dark-window-frame
>>> # Conflicts:
>>> # modules/javafx.graphics/src/main/native-glass/mac/GlassWindow.m
>>> - Window decorations adapt to color scheme
>> Had no time to further check this unfortunately, but did a lot of
>> testing today and found no issues on Windows 11!
>> Tested also with an application where I implemented a dark/light mode
>> switch with the new `@media` queries and `prefers-color-scheme`.
>>
>> https://github.com/user-attachments/assets/48fc2b82-1cbe-4067-a7a2-b21ce3052e7c
>>
>>
>> As mentioned above, Godot has the same logic as we have in the
>> Windows code, so the Windows part looked good to me.
>>
>> -------------
>>
>> PR Comment:
>> https://git.openjdk.org/jfx/pull/1845#issuecomment-3362898888
More information about the openjfx-dev
mailing list