mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 22:02:44 +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
	
	 Aliaksandr Kalenik
						Aliaksandr Kalenik