On Mon, 12 Oct 2026 22:20:07 GMT, Andy Goryachev <[email protected]> wrote:

>> What does 'remove the same style' mean? 
>> 
>> Also, is this related to this PR / even a bug?
>> Setting or binding a property, as outlined above is not applying CSS 
>> automatically, so you can do all kind of weird inbetween states by that.
>> It is how it is, I'm also on the side that developers calling the setter 
>> should win, but probably not possible anymore, probably for the mailing list 
>> for which I don't have time currently.
>
> css: test:on { prop: 5 }
> 
> 1. set style test:on, applyCss
> 2. check value 5
> 3. set prop settable=false
> 4. set pseudoclass :on to false via pseudoClassStateChanged()
> 5. applyCss
> 6. check value 5
> 7. set settable=true
> 8. set :on to true 
> 9. applyCss
> 10. set :on to false
> 11. check value, should be default

> > > Well, you can `bind` a property... good luck setting it then.
> > > Never quite understood why it was decided that in the CSS system, `set` 
> > > and `bind` aren't the ultimate truth, but can be overridden by the users 
> > > own stylesheet (but not the user agent stylesheet).
> > > I mean `USER` in browser terminology means the browser user (browsers 
> > > allow for stylesheets set directly by the end user, that fit between the 
> > > browsers own default look (`USER_AGENT`) and the website developers look 
> > > (`AUTHOR`).
> > > However, in JavaFX, `USER` has been conflated with application 
> > > developer... it should have been the end user.
> > 
> > 
> > 100% agree. This behavior is very confusing and feels just wrong.
> 
> There have been previous discussions on the mailing list and in JBS about the 
> wrong ordering. Setting a property from the code should override CSS, but 
> it's the other way around. In my opinion the ordering should be fixed, but it 
> will break the current behavior.

The **current** behavior is also broken to be honest, and unfixable (ie. `set` 
seems to work, then gets clobbered at random depending on when CSS will run 
again -- which is not guaranteed to run each frame).

I would be all for to do a true fix for that, extending this:


/**
 * Enumeration of the possible source or origin of a stylesheet and styles.
 * @since JavaFX 8.0
 */
public enum StyleOrigin {
    /** The stylesheet is a user-agent stylesheet */
    USER_AGENT,
    /** The value of a property was set by the user through a call to a set 
method */
    USER,
    /** The stylesheet is an external file */
    AUTHOR,
    /** The style is from the Node via setStyle */
    INLINE
}

Just add:

    /** Programmatic (new) */ 
    PROGRAMMATIC


The only slight annoyance here is that `USER` is specifically documented that 
it is for the `set` method, but as we didn't specify priorities here (and AFAIK 
nowhere in public API) we could just change the order as well (it is basically 
just implied from how CSS works in browsers, but undocumented).

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

PR Review Comment: https://git.openjdk.org/jfx/pull/2343#discussion_r4256205656

Reply via email to