[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

hyatt hyatt at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 07:26:13 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 8a2f26a99edfc9d7e78b10d1cfd55dbcaa48cb3d
Author: hyatt <hyatt at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Feb 26 08:25:33 2003 +0000

    	Fix for findNextLayer problems.  There was nothing wrong with
    	findNextLayer per se... it was just getting called *way* more
    	often than it needed to be.
    
    	Fixes two bugs, 3159866 and 3168815.
    
            Reviewed by darin
    
            * khtml/rendering/render_container.cpp:
            (RenderContainer::appendChildNode):
            (RenderContainer::insertChildNode):
            * khtml/rendering/render_object.cpp:
            (addLayers):
            (RenderObject::addLayers):
            * khtml/rendering/render_object.h:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@3703 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index 2254d16..43e70e3 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,21 @@
+2003-02-25  David Hyatt  <hyatt at apple.com>
+
+	Fix for findNextLayer problems.  There was nothing wrong with
+	findNextLayer per se... it was just getting called *way* more
+	often than it needed to be.
+
+	Fixes two bugs, 3159866 and 3168815.
+	
+        Reviewed by darin
+
+        * khtml/rendering/render_container.cpp:
+        (RenderContainer::appendChildNode):
+        (RenderContainer::insertChildNode):
+        * khtml/rendering/render_object.cpp:
+        (addLayers):
+        (RenderObject::addLayers):
+        * khtml/rendering/render_object.h:
+
 2003-02-25  Darin Adler  <darin at apple.com>
 
         Reviewed by Trey.
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index 2254d16..43e70e3 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,21 @@
+2003-02-25  David Hyatt  <hyatt at apple.com>
+
+	Fix for findNextLayer problems.  There was nothing wrong with
+	findNextLayer per se... it was just getting called *way* more
+	often than it needed to be.
+
+	Fixes two bugs, 3159866 and 3168815.
+	
+        Reviewed by darin
+
+        * khtml/rendering/render_container.cpp:
+        (RenderContainer::appendChildNode):
+        (RenderContainer::insertChildNode):
+        * khtml/rendering/render_object.cpp:
+        (addLayers):
+        (RenderObject::addLayers):
+        * khtml/rendering/render_object.h:
+
 2003-02-25  Darin Adler  <darin at apple.com>
 
         Reviewed by Trey.
diff --git a/WebCore/khtml/rendering/render_container.cpp b/WebCore/khtml/rendering/render_container.cpp
index c605f26..9481182 100644
--- a/WebCore/khtml/rendering/render_container.cpp
+++ b/WebCore/khtml/rendering/render_container.cpp
@@ -276,7 +276,7 @@ void RenderContainer::appendChildNode(RenderObject* newChild)
     
     // Keep our layer hierarchy updated.
     RenderLayer* layer = enclosingLayer();
-    newChild->addLayers(layer, findNextLayer(layer, newChild));
+    newChild->addLayers(layer, newChild);
          
     newChild->setMinMaxKnown( false );
     newChild->setLayouted( false );
@@ -307,7 +307,7 @@ void RenderContainer::insertChildNode(RenderObject* child, RenderObject* beforeC
     
     // Keep our layer hierarchy updated.
     RenderLayer* layer = enclosingLayer();
-    child->addLayers(layer, findNextLayer(layer, child));
+    child->addLayers(layer, child);
            
     child->setMinMaxKnown( false );
     child->setLayouted( false );
diff --git a/WebCore/khtml/rendering/render_object.cpp b/WebCore/khtml/rendering/render_object.cpp
index ce25084..c25e368 100644
--- a/WebCore/khtml/rendering/render_object.cpp
+++ b/WebCore/khtml/rendering/render_object.cpp
@@ -191,18 +191,33 @@ void RenderObject::insertChildNode(RenderObject*, RenderObject*)
     KHTMLAssert(0);
 }
 
-void RenderObject::addLayers(RenderLayer* parentLayer, RenderLayer* beforeChild)
+static void addLayers(RenderObject* obj, RenderLayer* parentLayer, RenderObject*& newObject,
+                      RenderLayer*& beforeChild)
 {
-    if (!parentLayer)
-        return;
-    
-    if (layer()) {
-        parentLayer->addChild(layer(), beforeChild);
+    if (obj->layer()) {
+        if (!beforeChild && newObject) {
+            // We need to figure out the layer that follows newObject.  We only do
+            // this the first time we find a child layer, and then we update the
+            // pointer values for newObject and beforeChild used by everyone else.
+            beforeChild = newObject->parent()->findNextLayer(parentLayer, newObject);
+            newObject = 0;
+        }
+        parentLayer->addChild(obj->layer(), beforeChild);
         return;
     }
 
-    for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling())
-        curr->addLayers(parentLayer, beforeChild);
+    for (RenderObject* curr = obj->firstChild(); curr; curr = curr->nextSibling())
+        addLayers(curr, parentLayer, newObject, beforeChild);
+}
+
+void RenderObject::addLayers(RenderLayer* parentLayer, RenderObject* newObject)
+{
+    if (!parentLayer)
+        return;
+    
+    RenderObject* object = newObject;
+    RenderLayer* beforeChild = 0;
+    ::addLayers(this, parentLayer, object, beforeChild);
 }
 
 void RenderObject::removeLayers(RenderLayer* parentLayer)
@@ -388,14 +403,15 @@ RenderBlock* RenderObject::containingBlock() const
         while (o && o->style()->position() == STATIC && !o->isHtml() && !o->isRoot())
             o = o->parent();
     } else {
-        while(o && (o->isInline() || o->isTableRow() || o->isTableSection() || o->isTableCol()))
+        while (o && ((o->isInline() && !o->isReplaced()) || o->isTableRow() || o->isTableSection()
+                     || o->isTableCol()))
             o = o->parent();
     }
 
-    if (!o) // This can happen because of setOverhangingContents in RenderImage's setStyle method.
+    if (!o || !o->isRenderBlock())
+        // This can happen because of setOverhangingContents in RenderImage's setStyle method.
         return 0;
     
-    KHTMLAssert(o->isRenderBlock());
     return static_cast<RenderBlock*>(o);
 }
 
@@ -997,7 +1013,8 @@ RenderRoot* RenderObject::root() const
     return static_cast<RenderRoot*>( o );
 }
 
-RenderObject *RenderObject::container() const
+// Inlined because it is called by setLayouted below.
+inline RenderObject *RenderObject::container() const
 {
     EPosition pos = m_style->position();
     RenderObject *o = 0;
@@ -1011,8 +1028,14 @@ RenderObject *RenderObject::container() const
         o = parent();
         while ( o && o->parent() ) o = o->parent();
     }
-    else if ( pos == ABSOLUTE )
-	o = containingBlock();
+    else if ( pos == ABSOLUTE ) {
+        // Same goes here.  We technically just want our containing block, but
+        // we may not have one if we're part of an uninstalled subtree.  We'll
+        // climb as high as we can though.
+        o = parent();
+        while (o && o->style()->position() == STATIC && !o->isHtml() && !o->isRoot())
+            o = o->parent();
+    }
     else
 	o = parent();
     return o;
diff --git a/WebCore/khtml/rendering/render_object.h b/WebCore/khtml/rendering/render_object.h
index 5b4d3d1..1e7a8df 100644
--- a/WebCore/khtml/rendering/render_object.h
+++ b/WebCore/khtml/rendering/render_object.h
@@ -108,7 +108,7 @@ public:
 
     virtual RenderLayer* layer() const { return 0; }
     RenderLayer* enclosingLayer();
-    void addLayers(RenderLayer* parentLayer, RenderLayer* beforeChild=0);
+    void addLayers(RenderLayer* parentLayer, RenderObject* newObject);
     void removeLayers(RenderLayer* parentLayer);
     void moveLayers(RenderLayer* oldParent, RenderLayer* newParent);
     RenderLayer* findNextLayer(RenderLayer* parentLayer, RenderObject* startPoint,

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list