Revert "LibWeb: Change where content selection via mouse is allowed"

This reverts commit 6c9adf3dbc.

This change breaks e.g. typing into the search box on google.com and
comment boxes on github.com.
This commit is contained in:
Timothy Flynn 2024-08-26 12:23:21 -04:00 committed by Tim Flynn
parent fa4b324a12
commit 660e846e94
Notes: github-actions[bot] 2024-08-26 18:09:55 +00:00
5 changed files with 3 additions and 24 deletions

View file

@ -70,8 +70,6 @@ public:
virtual bool has_activation_behavior() const override;
virtual void activation_behavior(DOM::Event const&) override;
virtual bool is_child_node_selectable(DOM::Node const&) const override { return false; }
private:
virtual bool is_html_button_element() const override { return true; }

View file

@ -80,8 +80,6 @@ public:
WebIDL::ExceptionOr<void> set_popover(Optional<String> value);
Optional<String> popover() const;
virtual bool is_child_node_selectable(DOM::Node const&) const { return true; }
protected:
HTMLElement(DOM::Document&, DOM::QualifiedName);

View file

@ -2380,9 +2380,4 @@ HTMLInputElement::ValueAttributeMode HTMLInputElement::value_attribute_mode() co
VERIFY_NOT_REACHED();
}
bool HTMLInputElement::is_child_node_selectable(DOM::Node const& node) const
{
return !is_button() && (!m_placeholder_element || !m_placeholder_element->is_inclusive_ancestor_of(node));
}
}

View file

@ -206,8 +206,6 @@ public:
WebIDL::ExceptionOr<void> set_selection_end_for_bindings(Optional<WebIDL::UnsignedLong> const&);
Optional<WebIDL::UnsignedLong> selection_end_for_bindings() const;
virtual bool is_child_node_selectable(DOM::Node const&) const override;
private:
HTMLInputElement(DOM::Document&, DOM::QualifiedName);

View file

@ -449,19 +449,9 @@ bool EventHandler::handle_mousedown(CSSPixelPoint viewport_position, CSSPixelPoi
HTML::run_unfocusing_steps(focused_element);
}
// Ask the next non-shadow parent element whether the node at the mouse position is selectable.
auto& root_node = dom_node->root();
DOM::Element* non_shadow_parent_element;
if (root_node.is_shadow_root())
non_shadow_parent_element = root_node.parent_or_shadow_host_element();
else
non_shadow_parent_element = dom_node->parent_element();
bool is_selectable = true;
if (non_shadow_parent_element && non_shadow_parent_element->is_html_element())
is_selectable = static_cast<HTML::HTMLElement*>(non_shadow_parent_element)->is_child_node_selectable(*dom_node);
// If it is selectable, place the document text cursor at the mouse position.
if (is_selectable) {
// If we didn't focus anything, place the document text cursor at the mouse position.
// FIXME: This is all rather strange. Find a better solution.
if (!did_focus_something || dom_node->is_editable()) {
auto& realm = document->realm();
document->set_cursor_position(DOM::Position::create(realm, *dom_node, result->index_in_node));
if (auto selection = document->get_selection()) {