Title: [163561] tags/Safari-538.16.2/Source/WebCore

Diff

Modified: tags/Safari-538.16.2/Source/WebCore/ChangeLog (163560 => 163561)


--- tags/Safari-538.16.2/Source/WebCore/ChangeLog	2014-02-06 21:24:17 UTC (rev 163560)
+++ tags/Safari-538.16.2/Source/WebCore/ChangeLog	2014-02-06 21:35:48 UTC (rev 163561)
@@ -1,3 +1,23 @@
+2014-02-06  Lucas Forschler  <[email protected]>
+
+        Merge r163558
+
+    2014-02-05  Brent Fulgham  <[email protected]>
+
+            Wheel events don't latch to inner scrollable elements 
+            https://bugs.webkit.org/show_bug.cgi?id=128225
+
+            Reviewed by Beth Dakin.
+
+            * page/EventHandler.cpp:
+            (WebCore::EventHandler::handleWheelEvent): Identify the case
+            where we have hit the end of a scroll, and treat that as a
+            valid 'handled' case. If the scroll event is just starting,
+            treat end-of-scroll as unhandled so the parent element can
+            handle things.
+            * page/WheelEventDeltaTracker.h:
+            (WebCore::WheelEventDeltaTracker::isFirstWheelEvent): Added.
+
 2014-02-04  Lucas Forschler  <[email protected]>
 
     Rollout r163280. <rdar://problem/15971014>

Modified: tags/Safari-538.16.2/Source/WebCore/page/EventHandler.cpp (163560 => 163561)


--- tags/Safari-538.16.2/Source/WebCore/page/EventHandler.cpp	2014-02-06 21:24:17 UTC (rev 163560)
+++ tags/Safari-538.16.2/Source/WebCore/page/EventHandler.cpp	2014-02-06 21:35:48 UTC (rev 163561)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2013 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2013, 2014 Apple Inc. All rights reserved.
  * Copyright (C) 2006 Alexey Proskuryakov ([email protected])
  * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies)
  *
@@ -2553,6 +2553,35 @@
 
     // We do another check on the frame view because the event handler can run JS which results in the frame getting destroyed.
     view = m_frame.view();
+    
+#if PLATFORM(MAC)
+    if (useLatchedWheelEventElement && m_latchedWheelEventElement == element) {
+        bool enclosingFrameIsMainFrame = view ? view->frame().isMainFrame() : false;
+
+        // If we are latched, and have nowhere to scroll, treat the scroll event as ended so that we don't
+        // cause the scroll to break free of the current scrolling widget.
+        if (!enclosingFrameIsMainFrame) {
+            bool didHandleWheelEvent = view ? view->wheelEvent(event) : false;
+            if (!didHandleWheelEvent) {
+                // If we are just starting a scroll event, and have nowhere left to scroll, allow
+                // the enclosing frame to handle the scroll.
+                didHandleWheelEvent = !m_recentWheelEventDeltaTracker->isFirstWheelEvent();
+            }
+
+            m_isHandlingWheelEvent = false;
+            return didHandleWheelEvent;
+        }
+
+        if (!m_recentWheelEventDeltaTracker->isFirstWheelEvent()) {
+            // When the main frame is our parent, and we have been scrolling within this region, we do not
+            // want to have the main frame consume any remaining scroll events. Keep them latched to this
+            // element.
+            m_isHandlingWheelEvent = false;
+            return true;
+        }
+    }
+#endif
+
     bool didHandleEvent = view ? view->wheelEvent(event) : false;
     m_isHandlingWheelEvent = false;
     return didHandleEvent;

Modified: tags/Safari-538.16.2/Source/WebCore/page/WheelEventDeltaTracker.h (163560 => 163561)


--- tags/Safari-538.16.2/Source/WebCore/page/WheelEventDeltaTracker.h	2014-02-06 21:24:17 UTC (rev 163560)
+++ tags/Safari-538.16.2/Source/WebCore/page/WheelEventDeltaTracker.h	2014-02-06 21:35:48 UTC (rev 163561)
@@ -51,6 +51,7 @@
     void endTrackingDeltas();
 
     bool isTrackingDeltas() const { return m_isTrackingDeltas; }
+    bool isFirstWheelEvent() const { return m_recentWheelEventDeltas.size() <= 1; }
 
     void recordWheelEventDelta(const PlatformWheelEvent&);
     DominantScrollGestureDirection dominantScrollGestureDirection() const;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to