diff options
-rw-r--r-- | Userland/Libraries/LibWeb/DOM/Node.cpp | 9 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/DOM/Node.h | 1 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/Page/EventHandler.cpp | 2 |
3 files changed, 11 insertions, 1 deletions
diff --git a/Userland/Libraries/LibWeb/DOM/Node.cpp b/Userland/Libraries/LibWeb/DOM/Node.cpp index f2bdbff321..5b933a892e 100644 --- a/Userland/Libraries/LibWeb/DOM/Node.cpp +++ b/Userland/Libraries/LibWeb/DOM/Node.cpp @@ -76,6 +76,15 @@ const HTML::HTMLElement* Node::enclosing_html_element() const return first_ancestor_of_type<HTML::HTMLElement>(); } +const HTML::HTMLElement* Node::enclosing_html_element_with_attribute(const FlyString& attribute) const +{ + for (auto* node = this; node; node = node->parent()) { + if (is<HTML::HTMLElement>(*node) && downcast<HTML::HTMLElement>(*node).has_attribute(attribute)) + return downcast<HTML::HTMLElement>(node); + } + return nullptr; +} + String Node::text_content() const { StringBuilder builder; diff --git a/Userland/Libraries/LibWeb/DOM/Node.h b/Userland/Libraries/LibWeb/DOM/Node.h index d9fc88687a..ecdf0c42e7 100644 --- a/Userland/Libraries/LibWeb/DOM/Node.h +++ b/Userland/Libraries/LibWeb/DOM/Node.h @@ -112,6 +112,7 @@ public: const HTML::HTMLAnchorElement* enclosing_link_element() const; const HTML::HTMLElement* enclosing_html_element() const; + const HTML::HTMLElement* enclosing_html_element_with_attribute(const FlyString&) const; String child_text_content() const; diff --git a/Userland/Libraries/LibWeb/Page/EventHandler.cpp b/Userland/Libraries/LibWeb/Page/EventHandler.cpp index 7539f92f04..e751a468ea 100644 --- a/Userland/Libraries/LibWeb/Page/EventHandler.cpp +++ b/Userland/Libraries/LibWeb/Page/EventHandler.cpp @@ -357,7 +357,7 @@ bool EventHandler::handle_mousemove(const Gfx::IntPoint& position, unsigned butt page->client().page_did_request_cursor_change(hovered_node_cursor); if (hovered_node_changed) { - RefPtr<HTML::HTMLElement> hovered_html_element = document.hovered_node() ? document.hovered_node()->enclosing_html_element() : nullptr; + RefPtr<HTML::HTMLElement> hovered_html_element = document.hovered_node() ? document.hovered_node()->enclosing_html_element_with_attribute(HTML::AttributeNames::title) : nullptr; if (hovered_html_element && !hovered_html_element->title().is_null()) { page->client().page_did_enter_tooltip_area(m_frame.to_main_frame_position(position), hovered_html_element->title()); } else { |