Bug 586041. Part 2: refactor RemoveChild. r=bas

This commit is contained in:
Robert O'Callahan 2010-06-01 11:32:05 +12:00
parent 17b78218c8
commit a66b969df2
2 changed files with 14 additions and 14 deletions

View File

@ -122,6 +122,8 @@ public:
virtual void RemoveChild(Layer* aChild);
protected:
void RemoveChildInternal(Layer* aChild);
BasicLayerManager* BasicManager()
{
return static_cast<BasicLayerManager*>(mManager);
@ -131,12 +133,7 @@ protected:
BasicContainerLayer::~BasicContainerLayer()
{
while (mFirstChild) {
Layer* next = mFirstChild->GetNextSibling();
mFirstChild->SetNextSibling(nsnull);
mFirstChild->SetPrevSibling(nsnull);
mFirstChild->SetParent(nsnull);
NS_RELEASE(mFirstChild);
mFirstChild = next;
RemoveChildInternal(mFirstChild);
}
MOZ_COUNT_DTOR(BasicContainerLayer);
@ -184,6 +181,12 @@ BasicContainerLayer::RemoveChild(Layer* aChild)
{
NS_ASSERTION(BasicManager()->InConstruction(),
"Can only set properties in construction phase");
RemoveChildInternal(aChild);
}
void
BasicContainerLayer::RemoveChildInternal(Layer* aChild)
{
NS_ASSERTION(aChild->Manager() == Manager(),
"Child has wrong manager");
NS_ASSERTION(aChild->GetParent() == this,

View File

@ -50,12 +50,7 @@ ContainerLayerD3D9::ContainerLayerD3D9(LayerManagerD3D9 *aManager)
ContainerLayerD3D9::~ContainerLayerD3D9()
{
while (mFirstChild) {
Layer* next = mFirstChild->GetNextSibling();
mFirstChild->SetNextSibling(nsnull);
mFirstChild->SetPrevSibling(nsnull);
mFirstChild->SetParent(nsnull);
NS_RELEASE(mFirstChild);
mFirstChild = next;
RemoveChild(mFirstChild);
}
}
@ -95,11 +90,13 @@ void
ContainerLayerD3D9::RemoveChild(Layer *aChild)
{
if (GetFirstChild() == aChild) {
mFirstChild = GetFirstChild()->GetNextSibling() ?
GetFirstChild()->GetNextSibling() : nsnull;
mFirstChild = GetFirstChild()->GetNextSibling();
if (mFirstChild) {
mFirstChild->SetPrevSibling(nsnull);
}
aChild->SetNextSibling(nsnull);
aChild->SetPrevSibling(nsnull);
aChild->SetParent(nsnull);
NS_RELEASE(aChild);
return;
}