LibWeb: Nested editing host focus should propagate to farthest ancestor

Nested editing hosts should act as a single big editing host, as long as
there are no uneditable elements in between.
This commit is contained in:
Jelle Raaijmakers 2025-08-21 15:24:55 +02:00 committed by Jelle Raaijmakers
parent 6c0a0b86ba
commit 90f1c8724b
Notes: github-actions[bot] 2025-08-26 08:27:24 +00:00
3 changed files with 20 additions and 0 deletions

View file

@ -550,6 +550,8 @@ void Selection::set_range(GC::Ptr<DOM::Range> range)
// AD-HOC: Focus editing host if the previous selection was outside of it. There seems to be no spec for this.
if (range && range->start_container()->is_editable_or_editing_host()) {
GC::Ref new_editing_host = *range->start_container()->editing_host();
while (new_editing_host->parent() && new_editing_host->parent()->is_editing_host())
new_editing_host = *new_editing_host->parent();
if (document()->focused_element() != new_editing_host) {
// FIXME: Determine and propagate the right focus trigger.
HTML::run_focusing_steps(new_editing_host, nullptr, HTML::FocusTrigger::Other);