mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 04:27:43 +00:00
LibWeb: Skip page scrolling for wheel events consumed by scrollable box
Fixes the bug when we scroll both scrollable box and page.
This commit is contained in:
parent
30d8c5f301
commit
90879a07ba
3 changed files with 37 additions and 4 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
scrollable.scrollTop: 100
|
||||||
|
window.scrollY: 0
|
|
@ -0,0 +1,32 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<link rel="match" href="reference/scroll-using-mousewheel-event-ref.html" />
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
border: 1px solid black;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scrollable {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
overflow: scroll;
|
||||||
|
border: 1px solid black;
|
||||||
|
margin-bottom: 2000px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content {
|
||||||
|
width: 200px;
|
||||||
|
height: 200px;
|
||||||
|
background-color: magenta;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script src="include.js"></script>
|
||||||
|
<div id="scrollable"><div id="content"></div></div>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
internals.wheel(10, 10, 0, 1000);
|
||||||
|
const scrollable = document.getElementById("scrollable");
|
||||||
|
println("scrollable.scrollTop: " + scrollable.scrollTop);
|
||||||
|
println("window.scrollY: " + window.scrollY);
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -174,10 +174,9 @@ bool EventHandler::handle_mousewheel(CSSPixelPoint position, CSSPixelPoint scree
|
||||||
if (paintable) {
|
if (paintable) {
|
||||||
auto* containing_block = paintable->containing_block();
|
auto* containing_block = paintable->containing_block();
|
||||||
while (containing_block) {
|
while (containing_block) {
|
||||||
if (containing_block->is_user_scrollable()) {
|
auto handled_scroll_event = const_cast<Painting::PaintableBox*>(containing_block->paintable_box())->handle_mousewheel({}, position, buttons, modifiers, wheel_delta_x, wheel_delta_y);
|
||||||
const_cast<Painting::PaintableBox*>(containing_block->paintable_box())->handle_mousewheel({}, position, buttons, modifiers, wheel_delta_x, wheel_delta_y);
|
if (handled_scroll_event)
|
||||||
break;
|
return true;
|
||||||
}
|
|
||||||
containing_block = containing_block->containing_block();
|
containing_block = containing_block->containing_block();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue