Title: [163558] trunk/Source/WebCore
- Revision
- 163558
- Author
- [email protected]
- Date
- 2014-02-06 12:43:56 -0800 (Thu, 06 Feb 2014)
Log Message
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.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (163557 => 163558)
--- trunk/Source/WebCore/ChangeLog 2014-02-06 20:38:48 UTC (rev 163557)
+++ trunk/Source/WebCore/ChangeLog 2014-02-06 20:43:56 UTC (rev 163558)
@@ -1,3 +1,19 @@
+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-06 Commit Queue <[email protected]>
Unreviewed, rolling out r163542.
Modified: trunk/Source/WebCore/page/EventHandler.cpp (163557 => 163558)
--- trunk/Source/WebCore/page/EventHandler.cpp 2014-02-06 20:38:48 UTC (rev 163557)
+++ trunk/Source/WebCore/page/EventHandler.cpp 2014-02-06 20:43:56 UTC (rev 163558)
@@ -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)
*
@@ -2528,6 +2528,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: trunk/Source/WebCore/page/WheelEventDeltaTracker.h (163557 => 163558)
--- trunk/Source/WebCore/page/WheelEventDeltaTracker.h 2014-02-06 20:38:48 UTC (rev 163557)
+++ trunk/Source/WebCore/page/WheelEventDeltaTracker.h 2014-02-06 20:43:56 UTC (rev 163558)
@@ -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