Index: cc/layer_impl.cc |
diff --git a/cc/layer_impl.cc b/cc/layer_impl.cc |
index 48cdec0d6d5b0346cf14f6657f3a9ccc811ce084..268f0b4bb221cdd39d93c76117930ba148e5fce0 100644 |
--- a/cc/layer_impl.cc |
+++ b/cc/layer_impl.cc |
@@ -72,28 +72,23 @@ void LayerImpl::addChild(scoped_ptr<LayerImpl> child) |
m_layerTreeHostImpl->setNeedsUpdateDrawProperties(); |
} |
-void LayerImpl::removeFromParent() |
+scoped_ptr<LayerImpl> LayerImpl::removeChild(LayerImpl* child) |
{ |
- if (!m_parent) |
- return; |
- |
- LayerImpl* parent = m_parent; |
- m_parent = 0; |
- |
- for (size_t i = 0; i < parent->m_children.size(); ++i) { |
- if (parent->m_children[i] == this) { |
+ for (size_t i = 0; i < m_children.size(); ++i) { |
+ if (m_children[i] == child) { |
+ scoped_ptr<LayerImpl> ret = m_children.take(i); |
+ m_children.remove(i); |
m_layerTreeHostImpl->setNeedsUpdateDrawProperties(); |
- // This remove call deletes |this|, so don't touch it anymore. |
- parent->m_children.remove(i); |
- return; |
+ return ret.Pass(); |
danakj
2012/12/09 23:35:51
nom nom, yay.
|
} |
} |
+ return scoped_ptr<LayerImpl>(); |
} |
void LayerImpl::removeAllChildren() |
{ |
- while (m_children.size()) |
- m_children[0]->removeFromParent(); |
+ m_children.clear(); |
+ m_layerTreeHostImpl->setNeedsUpdateDrawProperties(); |
} |
void LayerImpl::clearChildList() |