On Thu, 4 Dec 2025 14:40:43 GMT, Alessadro Parisi <[email protected]> wrote:
>> There's another thing that I think will improve the `HeaderBar`API:
>>
>> The `leftSystemInset`, `rightSystemInset`, and `minSystemHeight` properties
>> shouldn't be normal properties, but attached properties for `Stage`. If you
>> think about it, these aren't really properties of `HeaderBar`, but
>> properties of `Stage` that are used in the context of `HeaderBar`.
>>
>> We already have an attached property of this kind:
>> `HeaderBar.getPrefButtonHeight(Stage)`. Having the other three properties
>> defined similarly makes the API more consistent.
>>
>> It should be noted that this will be the first instance of an _observable_
>> attached property in JavaFX. So while regular attached properties have a
>> getter/setter pair like this...
>>
>> class HBox {
>> static Insets getMargin(Node);
>> static void setMargin(Node, Insets);
>> }
>>
>>
>> ...an observable attached property will have an observable property getter:
>>
>> class HeaderBar {
>> static ReadOnlyObjectProperty<Dimension2D>
>> leftSystemInsetProperty(Stage);
>> static Dimension2D getLeftSystemInset(Stage);
>> }
>>
>>
>> The form of the property getter shouldn't be controversial, as it follows
>> the existing getter/setter form for attached properties.
>>
>> What needs to be clarified, however, is what `getBean()` and `getName()`
>> should return for an attached observable property.
>> Since an attached property is a part of the object it is attached to, the
>> `getBean()` method should return that object. In our example, this means
>> `HeaderBar.leftSystemInsetProperty(myStage).getBean() == myStage`.
>>
>> For the `getName()` method, the usual convention is to return the
>> lowerCamelCase name of the property. However, since an attached property is
>> not declared on the object's class to which it is attached, the name
>> shouldn't claim that it is. I propose a naming convention of the form
>> `DeclaringType.myProperty`, that is, the property name is qualified with the
>> declaring type. In our example, the name of the property would be
>> "HeaderBar.leftSystemInset" (instead of just "leftSystemInset").
>
> @mstr2 are there any plans to look at this:
> <img width="908" height="508" alt="IMG_20251204_153610"
> src="https://github.com/user-attachments/assets/6306c678-38f3-4e8c-bcf1-933536403933"
> />
>
> On Linux Min 22.2 with Cinnamon I get a rectangular window no matter what. I
> also tried setting the root's background color and radius, as well as the
> scene's fill to `TRANSPARENT` but nothing works.
>
> One thing I'm curious about is why it was implemented this way. I mean, if
> the native decorations are just rendered on top of JavaFX nodes, then why I'm
> not able to set the scene's fill to `TRANSPARENT` and let the developer
> handle the rest.
>
> Edit: btw this is quite the issue because I can't achieve a consistent look
> across the various systems. The only solution is to use a `TRANSPARENT` Stage
> and make my own window buttons, losing a ton of features though (resize,
> drag, snap assistants, etc.)
@palexdev
In the case of linux, the decorations are a JavaFX overlay, the window manager
(at least mutter) will not draw over the window.
-------------
PR Comment: https://git.openjdk.org/jfx/pull/1936#issuecomment-3613559680