From 30e8f3f1ada46527f764f47d633661a2c21a2adb Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Fri, 9 May 2025 10:35:07 -0400 Subject: [PATCH] LibWeb: Update the
layout tree when it is opened/closed Otherwise, the arrow painted next to the
element does not update. Using a screenshot test here because apparently the direction of the arrow has no effect on the layout or paint trees. --- Libraries/LibWeb/DOM/Node.h | 1 + Libraries/LibWeb/HTML/HTMLDetailsElement.cpp | 3 +++ .../expected/details-open-then-closed-ref.html | 10 ++++++++++ .../images/details-open-then-closed.png | Bin 0 -> 5825 bytes .../input/details-open-then-closed.html | 9 +++++++++ 5 files changed, 23 insertions(+) create mode 100644 Tests/LibWeb/Screenshot/expected/details-open-then-closed-ref.html create mode 100644 Tests/LibWeb/Screenshot/images/details-open-then-closed.png create mode 100644 Tests/LibWeb/Screenshot/input/details-open-then-closed.html diff --git a/Libraries/LibWeb/DOM/Node.h b/Libraries/LibWeb/DOM/Node.h index 8487fac5d3f..03016591df7 100644 --- a/Libraries/LibWeb/DOM/Node.h +++ b/Libraries/LibWeb/DOM/Node.h @@ -112,6 +112,7 @@ enum class SetNeedsLayoutReason { #define ENUMERATE_SET_NEEDS_LAYOUT_TREE_UPDATE_REASONS(X) \ X(ElementSetInnerHTML) \ + X(DetailsElementOpenedOrClosed) \ X(HTMLInputElementSrcAttribute) \ X(HTMLObjectElementUpdateLayoutAndChildObjects) \ X(KeyframeEffect) \ diff --git a/Libraries/LibWeb/HTML/HTMLDetailsElement.cpp b/Libraries/LibWeb/HTML/HTMLDetailsElement.cpp index 46c32a4b682..7da433ef830 100644 --- a/Libraries/LibWeb/HTML/HTMLDetailsElement.cpp +++ b/Libraries/LibWeb/HTML/HTMLDetailsElement.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include namespace Web::HTML { @@ -308,6 +309,8 @@ void HTMLDetailsElement::update_shadow_tree_style() content-visibility: hidden; )~~~"_string)); } + + shadow_root()->set_needs_layout_tree_update(true, DOM::SetNeedsLayoutTreeUpdateReason::DetailsElementOpenedOrClosed); } } diff --git a/Tests/LibWeb/Screenshot/expected/details-open-then-closed-ref.html b/Tests/LibWeb/Screenshot/expected/details-open-then-closed-ref.html new file mode 100644 index 00000000000..cc4b3cd8d46 --- /dev/null +++ b/Tests/LibWeb/Screenshot/expected/details-open-then-closed-ref.html @@ -0,0 +1,10 @@ + + + diff --git a/Tests/LibWeb/Screenshot/images/details-open-then-closed.png b/Tests/LibWeb/Screenshot/images/details-open-then-closed.png new file mode 100644 index 0000000000000000000000000000000000000000..85f6ca5d11c9078a8e981ff3b53a1ee60709f8a7 GIT binary patch literal 5825 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 K&t;ucLK6VX(ran} literal 0 HcmV?d00001 diff --git a/Tests/LibWeb/Screenshot/input/details-open-then-closed.html b/Tests/LibWeb/Screenshot/input/details-open-then-closed.html new file mode 100644 index 00000000000..f2a09e9f265 --- /dev/null +++ b/Tests/LibWeb/Screenshot/input/details-open-then-closed.html @@ -0,0 +1,9 @@ + + +
+ I'm a summary + I'm a node +
+