diff --git a/Userland/Libraries/LibWeb/DOM/Document.cpp b/Userland/Libraries/LibWeb/DOM/Document.cpp index 4fbd11f8e5..4915601fda 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.cpp +++ b/Userland/Libraries/LibWeb/DOM/Document.cpp @@ -2,7 +2,7 @@ * Copyright (c) 2018-2023, Andreas Kling * Copyright (c) 2021-2023, Linus Groh * Copyright (c) 2021-2023, Luke Wilde - * Copyright (c) 2021, Sam Atkins + * Copyright (c) 2021-2023, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ @@ -1713,6 +1713,23 @@ void Document::set_active_element(Element* element) m_layout_root->set_needs_display(); } +void Document::set_target_element(Element* element) +{ + if (m_target_element.ptr() == element) + return; + + if (m_target_element) + m_target_element->set_needs_style_update(true); + + m_target_element = element; + + if (m_target_element) + m_target_element->set_needs_style_update(true); + + if (m_layout_root) + m_layout_root->set_needs_display(); +} + DeprecatedString Document::ready_state() const { switch (m_readiness) { diff --git a/Userland/Libraries/LibWeb/DOM/Document.h b/Userland/Libraries/LibWeb/DOM/Document.h index 40e8e454a4..0bb6f76770 100644 --- a/Userland/Libraries/LibWeb/DOM/Document.h +++ b/Userland/Libraries/LibWeb/DOM/Document.h @@ -295,6 +295,9 @@ public: void set_active_element(Element*); + Element const* target_element() const { return m_target_element.ptr(); } + void set_target_element(Element*); + bool created_for_appropriate_template_contents() const { return m_created_for_appropriate_template_contents; } JS::NonnullGCPtr appropriate_template_contents_owner_document(); @@ -565,6 +568,7 @@ private: JS::GCPtr m_focused_element; JS::GCPtr m_active_element; + JS::GCPtr m_target_element; bool m_created_for_appropriate_template_contents { false }; JS::GCPtr m_associated_inert_template_document; diff --git a/Userland/Libraries/LibWeb/DOM/Element.cpp b/Userland/Libraries/LibWeb/DOM/Element.cpp index 919b3c8dec..4f3b11d131 100644 --- a/Userland/Libraries/LibWeb/DOM/Element.cpp +++ b/Userland/Libraries/LibWeb/DOM/Element.cpp @@ -634,6 +634,11 @@ bool Element::is_active() const return document().active_element() == this; } +bool Element::is_target() const +{ + return document().target_element() == this; +} + JS::NonnullGCPtr Element::get_elements_by_class_name(DeprecatedFlyString const& class_names) { Vector list_of_class_names; diff --git a/Userland/Libraries/LibWeb/DOM/Element.h b/Userland/Libraries/LibWeb/DOM/Element.h index 403e078514..2de7d0eb9e 100644 --- a/Userland/Libraries/LibWeb/DOM/Element.h +++ b/Userland/Libraries/LibWeb/DOM/Element.h @@ -168,6 +168,7 @@ public: bool is_focused() const; bool is_active() const; + bool is_target() const; JS::NonnullGCPtr get_elements_by_class_name(DeprecatedFlyString const&);