LibWeb: Get the first DOM node with a 'title' attribute for tooltip area

Rather than expecting the first parent to have a 'title' attribute,
search all ancestors.
This commit is contained in:
Timothy Flynn 2021-03-30 12:06:06 -04:00 committed by Andreas Kling
parent 4fac577cf0
commit c503047c71
Notes: sideshowbarker 2024-07-18 20:57:05 +09:00
3 changed files with 11 additions and 1 deletions

View file

@ -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;

View file

@ -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;

View file

@ -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 {