Index: Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp |
=================================================================== |
--- Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp (revision 138265) |
+++ Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp (working copy) |
@@ -115,8 +115,32 @@ |
// frame view whose layout was updated is not the main frame. |
Region nonFastScrollableRegion = computeNonFastScrollableRegion(m_page->mainFrame(), IntPoint()); |
setNonFastScrollableRegion(nonFastScrollableRegion); |
+#if ENABLE(TOUCH_EVENT_TRACKING) |
+ Vector<IntRect> touchEventTargetRects; |
+ computeAbsoluteTouchEventTargetRects(m_page->mainFrame()->document(), touchEventTargetRects); |
+ setTouchEventTargetRects(touchEventTargetRects); |
+#endif |
} |
+void ScrollingCoordinatorChromium::touchEventTargetRectsDidChange(const Document* document) |
+{ |
+#if ENABLE(TOUCH_EVENT_TRACKING) |
+ // Wait until after layout to update. |
+ if (m_page->mainFrame()->view()->needsLayout()) |
+ return; |
+ |
+ // We won't necessarily get a setScrollLayer() call before this one, so grab the root ourselves. |
+ setScrollLayer(scrollLayerForFrameView(m_page->mainFrame()->view())); |
+ if (m_private->scrollLayer()) { |
+ Vector<IntRect> touchEventTargetRects; |
+ computeAbsoluteTouchEventTargetRects(document, touchEventTargetRects); |
+ setTouchEventTargetRects(touchEventTargetRects); |
+ } |
+#else |
+ UNUSED_PARAM(document); |
+#endif |
+} |
+ |
void ScrollingCoordinatorChromium::frameViewRootLayerDidChange(FrameView* frameView) |
{ |
ScrollingCoordinator::frameViewRootLayerDidChange(frameView); |
@@ -209,6 +233,18 @@ |
} |
} |
+void ScrollingCoordinatorChromium::setTouchEventTargetRects(const Vector<IntRect>& absoluteHitTestRects) |
+{ |
+ // We won't necessarily get a setScrollLayer() call before this one, so grab the root ourselves. |
+ setScrollLayer(scrollLayerForFrameView(m_page->mainFrame()->view())); |
+ if (m_private->scrollLayer()) { |
+ WebVector<WebRect> webRects(absoluteHitTestRects.size()); |
+ for (size_t i = 0; i < absoluteHitTestRects.size(); ++i) |
+ webRects[i] = absoluteHitTestRects[i]; |
+ m_private->scrollLayer()->setTouchEventHandlerRegion(webRects); |
+ } |
+} |
+ |
void ScrollingCoordinatorChromium::setWheelEventHandlerCount(unsigned wheelEventHandlerCount) |
{ |
// We won't necessarily get a setScrollLayer() call before this one, so grab the root ourselves. |