Add better dumping of overflow information for scrolling regions.
authorhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 21 Oct 2004 00:20:29 +0000 (00:20 +0000)
committerhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 21 Oct 2004 00:20:29 +0000 (00:20 +0000)
Fix for 3726524, crash in updateLayerPosition.  Make sure anonymous elements properly remove themselves
from the render tree so that layers and so forth are cleaned up.

        Reviewed by darin

        * khtml/rendering/render_container.cpp:
        (RenderContainer::detach):
        * khtml/rendering/render_layer.h:
        (khtml::RenderLayer::scrollXOffset):
        (khtml::RenderLayer::scrollYOffset):
        * kwq/KWQRenderTreeDebug.cpp:
        (write):

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/rendering/render_container.cpp
WebCore/khtml/rendering/render_layer.h
WebCore/kwq/KWQRenderTreeDebug.cpp

index 8445bbdf5197977c20c323cde8ed0ced3214d20d..8cf7d1d6f0c480975e7d9cad55e3dc1478ff9e4b 100644 (file)
@@ -1,3 +1,20 @@
+2004-10-20  David Hyatt  <hyatt@apple.com>
+
+       Add better dumping of overflow information for scrolling regions.
+
+       Fix for 3726524, crash in updateLayerPosition.  Make sure anonymous elements properly remove themselves
+       from the render tree so that layers and so forth are cleaned up.
+       
+        Reviewed by darin
+
+        * khtml/rendering/render_container.cpp:
+        (RenderContainer::detach):
+        * khtml/rendering/render_layer.h:
+        (khtml::RenderLayer::scrollXOffset):
+        (khtml::RenderLayer::scrollYOffset):
+        * kwq/KWQRenderTreeDebug.cpp:
+        (write):
+
 2004-10-20  David Hyatt  <hyatt@apple.com>
 
        Fix for 3791146, make sure all lines are checked when computing overflow.
index 641df27a79d7a0b3f25f9821ac0a23ca2a233f44..5536325bbc066aab4cccd62659d1b29c7b5df4ab 100644 (file)
@@ -61,16 +61,12 @@ void RenderContainer::detach()
     if (continuation())
         continuation()->detach();
     
-    RenderObject* next;
-    for(RenderObject* n = m_first; n; n = next ) {
-        n->removeFromObjectLists();
-        n->setParent(0);
-        next = n->nextSibling();
-        if (!n->isListMarker())
-            n->detach();
+    while (m_first) {
+        if (m_first->isListMarker())
+            m_first->remove();
+        else
+            m_first->detach();
     }
-    m_first = 0;
-    m_last = 0;
 
     RenderBox::detach();
 }
index e21718d3c2a864a2af6bcc7462f076a85b822789..50ef0e1dfbf1053e9957c8a90603b06e227c8607 100644 (file)
@@ -184,8 +184,8 @@ public:
     // Scrolling methods for layers that can scroll their overflow.
     void scrollOffset(int& x, int& y);
     void subtractScrollOffset(int& x, int& y);
-    int scrollXOffset() { return m_scrollX; }
-    int scrollYOffset() { return m_scrollY; }
+    int scrollXOffset() const { return m_scrollX; }
+    int scrollYOffset() const { return m_scrollY; }
     void scrollToOffset(int x, int y, bool updateScrollbars = true, bool repaint = true);
     void scrollToXOffset(int x) { scrollToOffset(x, m_scrollY); }
     void scrollToYOffset(int y) { scrollToOffset(m_scrollX, y); }
index 44ca2edf5b041658138dcf94bd54344ee3868ce9..d6601387ef5d45c257cfbb89a27cd0c639f443d8 100644 (file)
@@ -280,7 +280,7 @@ static void write(QTextStream &ts, const RenderObject &o, int indent = 0)
     }
 }
 
-static void write(QTextStream &ts, const RenderLayer &l,
+static void write(QTextStream &ts, RenderLayer &l,
                   const QRect& layerBounds, const QRect& backgroundClipRect, const QRect& clipRect,
                   int layerType = 0, int indent = 0)
 {
@@ -294,6 +294,17 @@ static void write(QTextStream &ts, const RenderLayer &l,
     if (layerBounds != layerBounds.intersect(clipRect))
         ts << " clip " << clipRect;
 
+    if (l.renderer()->hasOverflowClip()) {
+        if (l.scrollXOffset())
+            ts << " scrollX " << l.scrollXOffset();
+        if (l.scrollYOffset())
+            ts << " scrollY " << l.scrollYOffset();
+        if (l.renderer()->clientWidth() != l.scrollWidth())
+            ts << " scrollWidth " << l.scrollWidth();
+        if (l.renderer()->clientHeight() != l.scrollHeight())
+            ts << " scrollHeight " << l.scrollHeight();
+    }
+
     if (layerType == -1)
         ts << " layerType: background only";
     else if (layerType == 1)