diff --git a/Libraries/LibHTML/DOM/Document.cpp b/Libraries/LibHTML/DOM/Document.cpp index c884a00dd1..5ba2665d65 100644 --- a/Libraries/LibHTML/DOM/Document.cpp +++ b/Libraries/LibHTML/DOM/Document.cpp @@ -126,6 +126,12 @@ URL Document::complete_url(const String& string) const return url; } +void Document::invalidate_layout() +{ + if (on_invalidate_layout) + on_invalidate_layout(); +} + RefPtr Document::create_layout_node(const StyleResolver&, const StyleProperties*) const { return adopt(*new LayoutDocument(*this, StyleProperties::create())); diff --git a/Libraries/LibHTML/DOM/Document.h b/Libraries/LibHTML/DOM/Document.h index 6124736571..00a3024b6f 100644 --- a/Libraries/LibHTML/DOM/Document.h +++ b/Libraries/LibHTML/DOM/Document.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include @@ -63,6 +64,9 @@ public: Color visited_link_color() const { return m_visited_link_color; } void set_visited_link_color(Color); + void invalidate_layout(); + Function on_invalidate_layout; + private: virtual RefPtr create_layout_node(const StyleResolver&, const StyleProperties* parent_properties) const override; diff --git a/Libraries/LibHTML/HtmlView.cpp b/Libraries/LibHTML/HtmlView.cpp index f63b67d67d..eb08a1f4a5 100644 --- a/Libraries/LibHTML/HtmlView.cpp +++ b/Libraries/LibHTML/HtmlView.cpp @@ -31,7 +31,12 @@ void HtmlView::set_document(Document* document) { if (document == m_document) return; + + if (m_document) + m_document->on_invalidate_layout = nullptr; + m_document = document; + m_document->on_invalidate_layout = [this]() { layout_and_sync_size(); }; main_frame().set_document(document);