mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-10-12 13:18:55 +03:00
LibWeb: Make sure that root of style updates is marked clean
The recursive style update function was written a bit strangely and would only mark descendants of the style update root as not needing a style update. With this patch, all nodes in the subtree now have clean style after a style update finishes.
This commit is contained in:
parent
13361bc47d
commit
5a929f12bc
Notes:
sideshowbarker
2024-07-18 02:56:09 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/5a929f12bc9
@ -452,18 +452,19 @@ void Document::update_layout()
|
||||
|
||||
static void update_style_recursively(DOM::Node& node)
|
||||
{
|
||||
node.for_each_child([&](auto& child) {
|
||||
if (child.needs_style_update()) {
|
||||
if (is<Element>(child))
|
||||
verify_cast<Element>(child).recompute_style();
|
||||
child.set_needs_style_update(false);
|
||||
}
|
||||
if (child.child_needs_style_update()) {
|
||||
update_style_recursively(child);
|
||||
child.set_child_needs_style_update(false);
|
||||
}
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
if (is<Element>(node))
|
||||
static_cast<Element&>(node).recompute_style();
|
||||
node.set_needs_style_update(false);
|
||||
|
||||
if (node.child_needs_style_update()) {
|
||||
node.for_each_child([&](auto& child) {
|
||||
if (child.needs_style_update())
|
||||
update_style_recursively(child);
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
}
|
||||
|
||||
node.set_child_needs_style_update(false);
|
||||
}
|
||||
|
||||
void Document::update_style()
|
||||
|
Loading…
Reference in New Issue
Block a user