bug 850981 - make AppendChild inline around InsertChildAt() r=surkov

This commit is contained in:
Trevor Saunders 2013-03-14 00:53:28 -04:00
parent 1f9cf836e2
commit 4e9b298abf
10 changed files with 28 additions and 45 deletions

View File

@ -128,9 +128,9 @@ gboolean fireRootAccessibleAddedCB(gpointer data)
}
bool
ApplicationAccessibleWrap::AppendChild(Accessible* aChild)
ApplicationAccessibleWrap::InsertChildAt(uint32_t aIdx, Accessible* aChild)
{
if (!ApplicationAccessible::AppendChild(aChild))
if (!ApplicationAccessible::InsertChildAt(aIdx, aChild))
return false;
AtkObject* atkAccessible = AccessibleWrap::GetAtkObject(aChild);

View File

@ -20,7 +20,7 @@ public:
// Accessible
virtual mozilla::a11y::ENameValueFlag Name(nsString& aName);
virtual bool AppendChild(Accessible* aChild);
virtual bool InsertChildAt(uint32_t aIdx, Accessible* aChild) MOZ_OVERRIDE;
virtual bool RemoveChild(Accessible* aChild);
/**

View File

@ -2639,41 +2639,31 @@ Accessible::InvalidateChildren()
SetChildrenFlag(eChildrenUninitialized);
}
bool
Accessible::AppendChild(Accessible* aChild)
{
if (!aChild)
return false;
if (!mChildren.AppendElement(aChild))
return false;
if (!nsAccUtils::IsEmbeddedObject(aChild))
SetChildrenFlag(eMixedChildren);
aChild->BindToParent(this, mChildren.Length() - 1);
return true;
}
bool
Accessible::InsertChildAt(uint32_t aIndex, Accessible* aChild)
{
if (!aChild)
return false;
if (!mChildren.InsertElementAt(aIndex, aChild))
return false;
if (aIndex == mChildren.Length()) {
if (!mChildren.AppendElement(aChild))
return false;
for (uint32_t idx = aIndex + 1; idx < mChildren.Length(); idx++) {
NS_ASSERTION(mChildren[idx]->mIndexInParent == idx - 1, "Accessible child index doesn't match");
mChildren[idx]->mIndexInParent = idx;
} else {
if (!mChildren.InsertElementAt(aIndex, aChild))
return false;
for (uint32_t idx = aIndex + 1; idx < mChildren.Length(); idx++) {
NS_ASSERTION(mChildren[idx]->mIndexInParent == idx - 1, "Accessible child index doesn't match");
mChildren[idx]->mIndexInParent = idx;
}
mEmbeddedObjCollector = nullptr;
}
if (!nsAccUtils::IsEmbeddedObject(aChild))
SetChildrenFlag(eMixedChildren);
mEmbeddedObjCollector = nullptr;
aChild->BindToParent(this, aIndex);
return true;
}

View File

@ -333,7 +333,8 @@ public:
/**
* Append/insert/remove a child. Return true if operation was successful.
*/
virtual bool AppendChild(Accessible* aChild);
bool AppendChild(Accessible* aChild)
{ return InsertChildAt(mChildren.Length(), aChild); }
virtual bool InsertChildAt(uint32_t aIndex, Accessible* aChild);
virtual bool RemoveChild(Accessible* aChild);

View File

@ -43,13 +43,6 @@ LeafAccessible::ChildAtPoint(int32_t aX, int32_t aY,
return this;
}
bool
LeafAccessible::AppendChild(Accessible* aChild)
{
NS_NOTREACHED("AppendChild called on leaf accessible!");
return false;
}
bool
LeafAccessible::InsertChildAt(uint32_t aIndex, Accessible* aChild)
{

View File

@ -34,8 +34,6 @@ public:
// Accessible
virtual Accessible* ChildAtPoint(int32_t aX, int32_t aY,
EWhichChildAtPoint aWhichChild);
virtual bool AppendChild(Accessible* aChild) MOZ_OVERRIDE MOZ_FINAL;
virtual bool InsertChildAt(uint32_t aIndex, Accessible* aChild) MOZ_OVERRIDE MOZ_FINAL;
virtual bool RemoveChild(Accessible* aChild) MOZ_OVERRIDE MOZ_FINAL;

View File

@ -149,8 +149,10 @@ OuterDocAccessible::InvalidateChildren()
}
bool
OuterDocAccessible::AppendChild(Accessible* aAccessible)
OuterDocAccessible::InsertChildAt(uint32_t aIdx, Accessible* aAccessible)
{
NS_ASSERTION(aAccessible->IsDoc(),
"OuterDocAccessible should only have document child!");
// We keep showing the old document for a bit after creating the new one,
// and while building the new DOM and frame tree. That's done on purpose
// to avoid weird flashes of default background color.
@ -159,7 +161,7 @@ OuterDocAccessible::AppendChild(Accessible* aAccessible)
if (mChildren.Length())
mChildren[0]->Shutdown();
if (!AccessibleWrap::AppendChild(aAccessible))
if (!AccessibleWrap::InsertChildAt(0, aAccessible))
return false;
#ifdef A11Y_LOG

View File

@ -42,7 +42,7 @@ public:
EWhichChildAtPoint aWhichChild);
virtual void InvalidateChildren();
virtual bool AppendChild(Accessible* aAccessible);
virtual bool InsertChildAt(uint32_t aIdx, Accessible* aChild) MOZ_OVERRIDE;
virtual bool RemoveChild(Accessible* aAccessible);
// ActionAccessible

View File

@ -49,7 +49,7 @@ public: // construction, destruction
virtual void Shutdown ();
virtual void InvalidateChildren();
virtual bool AppendChild(Accessible* aAccessible);
virtual bool InsertChildAt(uint32_t aIdx, Accessible* aChild) MOZ_OVERRIDE;
virtual bool RemoveChild(Accessible* aAccessible);
virtual nsresult HandleAccEvent(AccEvent* aEvent);

View File

@ -198,14 +198,13 @@ AccessibleWrap::InvalidateChildren()
}
bool
AccessibleWrap::AppendChild(Accessible* aAccessible)
AccessibleWrap::InsertChildAt(uint32_t aIdx, Accessible* aAccessible)
{
bool appended = Accessible::AppendChild(aAccessible);
if (appended && mNativeObject)
bool inserted = Accessible::InsertChildAt(aIdx, aAccessible);
if (inserted && mNativeObject)
[mNativeObject appendChild:aAccessible];
return appended;
return inserted;
}
bool