Skip to content

st/theme: Unref CRStylesheet after removing old theme nodes

Jonas Dreßler requested to merge verdre/gnome-shell:fix-that-last-crash into master

Since we now remove all theme nodes on a stylesheet change (ie. StTheme's "custom-stylesheets-changed" signal) instead of only invalidating them, those nodes may not be accessed anymore as soon as "custom-stylesheets-changed" is emitted.

It turned out though that when comparing them to the newly generated nodes in st_widget_recompute_style() using the st_theme_node_paint/geometry_equal() functions, the properties of the old nodes will still be accessed, causing a crash since the CRDeclarations are already freed.

To fix that, keep the reference to the CRStylesheet, which owns the CRDeclarations used by the theme nodes, around a bit longer, so it's still possible to access the CRDeclarations inside the "custom-stylesheets-changed" signal handler. This allows us to compare the old theme nodes to the new ones since the CSS properties of both are still valid.

Fixes #2709 (closed)

Merge request reports