Version: (using KDE Devel) Installed from: Compiled sources :hover triggers erratic behaviour in some situations. Noticed on: http://xmoto.free.fr/index.php?page=all_highscores Try hovering the big table: Instead of changing the rows background-color, it's the cells' (and also the links' within) that change in a weird way. It seems to stem from r532332 (the big dynamic restyling changes). Some notes: - the erratic behaviour is apparently triggered by an :hover rule that is erroneously preceded by a space. It would be ignored in quirk mode, but page is strict. Nevertheless, the style content of said rule doesn't seem to justify the erratic behaviour that is observed. - when removing the problematic space, erratic behaviour goes away, but correct style still isn't applied to rows.
Created attachment 17362 [details] test case
Returns 500 internal server error
page is available now
This bug seems caused by inheriting non-inherited CSS properties. This is something our model doesn't currently handle. If it worked before but not now, it's because I made restyling more fine-grained, and it only worked by accident before. I have an experimental patch that enables dynamically inheriting non-inherited properties. I will try it with this test case.
Created attachment 17932 [details] Dynamically update inherited "non-inherited" properties This patch fixes the webpage :)
> dynamically inheriting non-inherited properties. Could you explain that paradox in some more details? The patch works absolutely fine but for the life of me, I can't make any sense out of what it does :)
Okay okay. I just like writing it that way because it sounds so non-sensitical ;) The point is CSS has inherited and non-inherited properties. When we restyle an element and a inherited attribute change we restyle all the children. (NodeImpl::diff and ElementImpl:recalcStyle) Now non-inherited properties can be set to value "inherit". In this test-case the background-color is inherited. When the parent element change background-color we don't restyle the children because no inherited property was changed. This patch catches all cases value "inherit" on non-inherited properties and sets a flag so we restyle the element when a non-inherited property change in the parent.
ahh alright, that's all clear now. Maybe the method would need be even more verbose for the casual reader to understand? e.g setInheritedNoninherited => setExplicitelyInheritingNoninherited or something similar... oh well.
allan: do you still have this patch in mind?
SVN commit 625864 by carewolf: Handle dynamic inheritance when inherit value is used explictly on default non-inherited properties. BUG:132368 M +12 -1 ChangeLog M +82 -47 css/cssstyleselector.cpp M +6 -2 rendering/render_style.h M +4 -3 xml/dom_elementimpl.cpp M +8 -0 xml/dom_nodeimpl.cpp M +2 -0 xml/dom_nodeimpl.h M +2 -1 xml/dom_textimpl.h