mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-07 21:59:54 +00:00
LibWeb: Implement InputEvent.getTargetRanges()
This returns a list of ranges that would be affected by a change to the DOM if the input event is not cancelled.
This commit is contained in:
parent
ed3d0d76ec
commit
7874f325a8
Notes:
github-actions[bot]
2025-07-20 00:35:27 +00:00
Author: https://github.com/tcl3
Commit: 7874f325a8
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5505
Reviewed-by: https://github.com/shannonbooth
6 changed files with 67 additions and 12 deletions
|
|
@ -1117,6 +1117,18 @@ static bool is_enter_key_or_interoperable_enter_key_combo(UIEvents::KeyCode key,
|
|||
return false;
|
||||
}
|
||||
|
||||
static GC::RootVector<GC::Ref<DOM::StaticRange>> target_ranges_for_input_event(DOM::Document const& document)
|
||||
{
|
||||
GC::RootVector<GC::Ref<DOM::StaticRange>> target_ranges { document.heap() };
|
||||
if (auto selection = document.get_selection(); selection && !selection->is_collapsed()) {
|
||||
if (auto range = selection->range()) {
|
||||
auto static_range = document.realm().create<DOM::StaticRange>(range->start_container(), range->start_offset(), range->end_container(), range->end_offset());
|
||||
target_ranges.append(static_range);
|
||||
}
|
||||
}
|
||||
return target_ranges;
|
||||
}
|
||||
|
||||
EventResult EventHandler::input_event(FlyString const& event_name, FlyString const& input_type, HTML::Navigable& navigable, u32 code_point)
|
||||
{
|
||||
auto document = navigable.active_document();
|
||||
|
|
@ -1138,11 +1150,11 @@ EventResult EventHandler::input_event(FlyString const& event_name, FlyString con
|
|||
return input_event(event_name, input_type, *navigable_container.content_navigable(), code_point);
|
||||
}
|
||||
|
||||
auto event = UIEvents::InputEvent::create_from_platform_event(document->realm(), event_name, input_event_init);
|
||||
auto event = UIEvents::InputEvent::create_from_platform_event(document->realm(), event_name, input_event_init, target_ranges_for_input_event(*document));
|
||||
return focused_element->dispatch_event(event) ? EventResult::Accepted : EventResult::Cancelled;
|
||||
}
|
||||
|
||||
auto event = UIEvents::InputEvent::create_from_platform_event(document->realm(), event_name, input_event_init);
|
||||
auto event = UIEvents::InputEvent::create_from_platform_event(document->realm(), event_name, input_event_init, target_ranges_for_input_event(*document));
|
||||
|
||||
if (auto* body = document->body())
|
||||
return body->dispatch_event(event) ? EventResult::Accepted : EventResult::Cancelled;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue