Skip to content

Commit

Permalink
Revert "LibWeb: Change where content selection via mouse is allowed"
Browse files Browse the repository at this point in the history
This reverts commit 6c9adf3.

This change breaks e.g. typing into the search box on google.com and
comment boxes on github.com.
  • Loading branch information
trflynn89 committed Aug 26, 2024
1 parent fa4b324 commit 660e846
Show file tree
Hide file tree
Showing 5 changed files with 3 additions and 24 deletions.
2 changes: 0 additions & 2 deletions Userland/Libraries/LibWeb/HTML/HTMLButtonElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,6 @@ class HTMLButtonElement final
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; }

Expand Down
2 changes: 0 additions & 2 deletions Userland/Libraries/LibWeb/HTML/HTMLElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,6 @@ class HTMLElement
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);

Expand Down
5 changes: 0 additions & 5 deletions Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}

}
2 changes: 0 additions & 2 deletions Userland/Libraries/LibWeb/HTML/HTMLInputElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -206,8 +206,6 @@ class HTMLInputElement final
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);

Expand Down
16 changes: 3 additions & 13 deletions Userland/Libraries/LibWeb/Page/EventHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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()) {
Expand Down

0 comments on commit 660e846

Please sign in to comment.