[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