Fix for 3773809, make sure that overflow regions never end up at an invalid scroll...
authorhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 21 Jan 2005 22:45:49 +0000 (22:45 +0000)
committerhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 21 Jan 2005 22:45:49 +0000 (22:45 +0000)
        Reviewed by kocienda

        * khtml/rendering/render_layer.cpp:
        (RenderLayer::updateScrollInfoAfterLayout):

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/rendering/render_layer.cpp

index eadc4087e80beab8ed78426aa7e72ea780859d86..377013076a9d90bfc2a5936b79a895a9193c4785 100644 (file)
@@ -1,3 +1,12 @@
+2005-01-21  David Hyatt  <hyatt@apple.com>
+
+       Fix for 3773809, make sure that overflow regions never end up at an invalid scroll offset because of a layout change.
+       
+        Reviewed by kocienda
+
+        * khtml/rendering/render_layer.cpp:
+        (RenderLayer::updateScrollInfoAfterLayout):
+
 2005-01-21  David Hyatt  <hyatt@apple.com>
 
        Fix for 3966349, hang loading page.  Make sure that loops using popOneBlock properly check for a null
index 07cb433ea2414045de006724550b3e50df59dfa4..d25bfa35498b8859b63a2042482af47ae3fa0652 100644 (file)
@@ -660,7 +660,16 @@ RenderLayer::updateScrollInfoAfterLayout()
 
     bool needHorizontalBar, needVerticalBar;
     computeScrollDimensions(&needHorizontalBar, &needVerticalBar);
-    
+
+    if (m_object->style()->overflow() != OMARQUEE) {
+        // Layout may cause us to be in an invalid scroll position.  In this case we need
+        // to pull our scroll offsets back to the max (or push them up to the min).
+        int newX = kMax(0, kMin(m_scrollX, scrollWidth() - m_object->clientWidth()));
+        int newY = kMax(0, kMin(m_scrollY, scrollHeight() - m_object->clientHeight()));
+        if (newX != m_scrollX || newY != m_scrollY)
+            scrollToOffset(newX, newY);
+    }
+
     bool haveHorizontalBar = m_hBar;
     bool haveVerticalBar = m_vBar;