mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-07 21:59:54 +00:00
LibWeb: Prevent default on pointerdown/mousedown should skip focus steps
Fixes a bug in the ChatGPT model dropdown where clicking it immediately closes the menu because focus is being stolen.
This commit is contained in:
parent
d5d37abfa5
commit
2a18b6b802
Notes:
github-actions[bot]
2025-11-21 07:32:06 +00:00
Author: https://github.com/kalenikaliaksandr
Commit: 2a18b6b802
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6891
3 changed files with 46 additions and 2 deletions
|
|
@ -667,8 +667,10 @@ EventResult EventHandler::handle_mousedown(CSSPixelPoint visual_viewport_positio
|
|||
auto offset = compute_mouse_event_offset(page_offset, *layout_node->first_paintable());
|
||||
auto pointer_event = UIEvents::PointerEvent::create_from_platform_event(node->realm(), m_navigable->active_window_proxy(), UIEvents::EventNames::pointerdown, screen_position, page_offset, viewport_position, offset, {}, button, buttons, modifiers).release_value_but_fixme_should_propagate_errors();
|
||||
light_dismiss_activities(pointer_event, node);
|
||||
node->dispatch_event(pointer_event);
|
||||
node->dispatch_event(UIEvents::MouseEvent::create_from_platform_event(node->realm(), m_navigable->active_window_proxy(), UIEvents::EventNames::mousedown, screen_position, page_offset, viewport_position, offset, {}, button, buttons, modifiers).release_value_but_fixme_should_propagate_errors());
|
||||
if (!node->dispatch_event(pointer_event))
|
||||
return EventResult::Cancelled;
|
||||
if (!node->dispatch_event(UIEvents::MouseEvent::create_from_platform_event(node->realm(), m_navigable->active_window_proxy(), UIEvents::EventNames::mousedown, screen_position, page_offset, viewport_position, offset, {}, button, buttons, modifiers).release_value_but_fixme_should_propagate_errors()))
|
||||
return EventResult::Cancelled;
|
||||
}
|
||||
|
||||
// NOTE: Dispatching an event may have disturbed the world.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,4 @@
|
|||
pointerdown
|
||||
pointerup
|
||||
mouseup
|
||||
click
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<!DOCTYPE html>
|
||||
<button id="test-button" style="width: 100px; height: 100px">Test button</button>
|
||||
<script src="include.js"></script>
|
||||
<script>
|
||||
asyncTest(done => {
|
||||
const button = document.getElementById("test-button");
|
||||
|
||||
const eventsToLog = [
|
||||
"mousedown",
|
||||
"mouseup",
|
||||
"click",
|
||||
"dblclick",
|
||||
"pointerdown",
|
||||
"pointerup",
|
||||
"focus",
|
||||
"blur",
|
||||
"focusin",
|
||||
"focusout",
|
||||
];
|
||||
|
||||
eventsToLog.forEach(type => {
|
||||
button.addEventListener(type, event => {
|
||||
if (type === "pointerdown" || type === "mousedown") event.preventDefault();
|
||||
println(`${type}`, {
|
||||
key: event.key,
|
||||
code: event.code,
|
||||
button: event.button,
|
||||
pointerType: event.pointerType,
|
||||
eventPhase: event.eventPhase,
|
||||
timeStamp: event.timeStamp,
|
||||
});
|
||||
if (type === "click") done();
|
||||
});
|
||||
});
|
||||
|
||||
internals.click(50, 50);
|
||||
});
|
||||
</script>
|
||||
Loading…
Add table
Add a link
Reference in a new issue