[iOS][WK2] Fix annoying scrolling bugs
authorbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Apr 2014 03:26:53 +0000 (03:26 +0000)
committerbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Apr 2014 03:26:53 +0000 (03:26 +0000)
https://bugs.webkit.org/show_bug.cgi?id=131722

Patch by Benjamin Poulain <bpoulain@apple.com> on 2014-04-16
Reviewed by Simon Fraser.

Source/WebCore:
* platform/ScrollView.cpp:
(WebCore::ScrollView::updateScrollbars):
Since ScrollingStateScrollingNode::setRequestedScrollPosition() was added, we see ScrollView::updateScrollbars()
keep changing the scroll position to incorrect values.

On iOS, the scrollbars are handled by the native UI, the code just compute incorrect scroll position. On WebKit1,
the code does not run because there is a platformWidget().

Just #ifdef the whole useless code.

Source/WebKit2:
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _scrollToContentOffset:WebCore::]):
We are scrolling at the wrong position when we have the "small obscured insets".

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167411 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/ScrollView.cpp
Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

index 9f39b96..3394cb1 100644 (file)
@@ -1,3 +1,20 @@
+2014-04-16  Benjamin Poulain  <bpoulain@apple.com>
+
+        [iOS][WK2] Fix annoying scrolling bugs
+        https://bugs.webkit.org/show_bug.cgi?id=131722
+
+        Reviewed by Simon Fraser.
+
+        * platform/ScrollView.cpp:
+        (WebCore::ScrollView::updateScrollbars):
+        Since ScrollingStateScrollingNode::setRequestedScrollPosition() was added, we see ScrollView::updateScrollbars()
+        keep changing the scroll position to incorrect values.
+
+        On iOS, the scrollbars are handled by the native UI, the code just compute incorrect scroll position. On WebKit1,
+        the code does not run because there is a platformWidget().
+
+        Just #ifdef the whole useless code.
+
 2014-04-16  Alexandru Chiculita  <achicu@adobe.com>
 
         Improve performance of the RenderLayerCompositor::OverlapMap
index 909213f..cc6f056 100644 (file)
@@ -537,11 +537,9 @@ void ScrollView::windowResizerRectChanged()
     updateScrollbars(scrollOffset());
 }
 
-static const unsigned cMaxUpdateScrollbarsPass = 2;
-
 void ScrollView::updateScrollbars(const IntSize& desiredOffset)
 {
-    if (m_inUpdateScrollbars || prohibitsScrolling() || platformWidget())
+    if (m_inUpdateScrollbars || prohibitsScrolling() || platformWidget() || delegatesScrolling())
         return;
 
     bool hasOverlayScrollbars = (!m_horizontalScrollbar || m_horizontalScrollbar->isOverlayScrollbar()) && (!m_verticalScrollbar || m_verticalScrollbar->isOverlayScrollbar());
@@ -640,6 +638,7 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset)
             }
         }
 
+        const unsigned cMaxUpdateScrollbarsPass = 2;
         if ((sendContentResizedNotification || needAnotherPass) && m_updateScrollbarsPass < cMaxUpdateScrollbarsPass) {
             m_updateScrollbarsPass++;
             contentsResized();
@@ -732,6 +731,7 @@ void ScrollView::updateScrollbars(const IntSize& desiredOffset)
         m_verticalScrollbar->offsetDidChange();
 
     m_inUpdateScrollbars = false;
+#endif
 }
 
 const int panIconSizeLength = 16;
index f1aa0fa..0924d29 100644 (file)
@@ -1,3 +1,14 @@
+2014-04-16  Benjamin Poulain  <bpoulain@apple.com>
+
+        [iOS][WK2] Fix annoying scrolling bugs
+        https://bugs.webkit.org/show_bug.cgi?id=131722
+
+        Reviewed by Simon Fraser.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _scrollToContentOffset:WebCore::]):
+        We are scrolling at the wrong position when we have the "small obscured insets".
+
 2014-04-16  Gavin Barraclough  <baraclough@apple.com>
 
         On iOS keep network process running using a process assertion rather than a boost
index 980fdf4..348082f 100644 (file)
@@ -556,10 +556,7 @@ static WebCore::FloatPoint constrainContentOffset(WebCore::FloatPoint contentOff
     CGFloat zoomScale = contentZoomScale(self);
     scaledOffset.scale(zoomScale, zoomScale);
 
-    // FIXME: the offset is relative to the unobscured rect top, not the content insets!
-    UIEdgeInsets inset = [_scrollView contentInset];
-    scaledOffset += WebCore::FloatSize(-inset.left, -inset.top);
-
+    scaledOffset -= WebCore::FloatSize(_obscuredInsets.left, _obscuredInsets.top);
     [_scrollView setContentOffset:scaledOffset];
 }