diff --git a/Libraries/LibWeb/Animations/KeyframeEffect.cpp b/Libraries/LibWeb/Animations/KeyframeEffect.cpp index 543a827cd22..3a776e4a136 100644 --- a/Libraries/LibWeb/Animations/KeyframeEffect.cpp +++ b/Libraries/LibWeb/Animations/KeyframeEffect.cpp @@ -962,7 +962,7 @@ void KeyframeEffect::update_computed_properties() } if (invalidation.relayout) - target->set_needs_layout_update(DOM::SetNeedsLayoutReason::KeyframeEffect); + document.set_needs_layout(DOM::SetNeedsLayoutReason::KeyframeEffect); if (invalidation.rebuild_layout_tree) document.invalidate_layout_tree(DOM::InvalidateLayoutTreeReason::KeyframeEffect); if (invalidation.repaint) { diff --git a/Libraries/LibWeb/DOM/CharacterData.cpp b/Libraries/LibWeb/DOM/CharacterData.cpp index 663d3b1b428..0c008293277 100644 --- a/Libraries/LibWeb/DOM/CharacterData.cpp +++ b/Libraries/LibWeb/DOM/CharacterData.cpp @@ -147,7 +147,7 @@ WebIDL::ExceptionOr CharacterData::replace_data(size_t offset, size_t coun static_cast(*layout_node).invalidate_text_for_rendering(); // We also need to relayout. - set_needs_layout_update(SetNeedsLayoutReason::CharacterDataReplaceData); + document().set_needs_layout(SetNeedsLayoutReason::CharacterDataReplaceData); } document().bump_character_data_version(); diff --git a/Libraries/LibWeb/DOM/Document.cpp b/Libraries/LibWeb/DOM/Document.cpp index 97418b439ca..011429087b2 100644 --- a/Libraries/LibWeb/DOM/Document.cpp +++ b/Libraries/LibWeb/DOM/Document.cpp @@ -1211,6 +1211,20 @@ Optional Document::encoding_parse_and_serialize_url(StringView url) cons return parsed_url->serialize(); } +void Document::set_needs_layout(SetNeedsLayoutReason reason) +{ + if (m_needs_layout) + return; + if constexpr (UPDATE_LAYOUT_DEBUG) { + // NOTE: We check some conditions here to avoid debug spam in documents that don't do layout. + auto navigable = this->navigable(); + if (m_layout_root && navigable && navigable->active_document() == this) + dbgln_if(UPDATE_LAYOUT_DEBUG, "NEED LAYOUT {}", to_string(reason)); + } + m_needs_layout = true; + schedule_layout_update(); +} + void Document::invalidate_layout_tree(InvalidateLayoutTreeReason reason) { if (m_layout_root) @@ -1285,7 +1299,7 @@ void Document::update_layout(UpdateLayoutReason reason) update_style(); - if (!m_needs_layout_update && m_layout_root) + if (!m_needs_layout && m_layout_root) return; // NOTE: If this is a document hosting