mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-12-08 06:09:58 +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 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();
|
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);
|
light_dismiss_activities(pointer_event, node);
|
||||||
node->dispatch_event(pointer_event);
|
if (!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());
|
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.
|
// 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