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 bool
ApplicationAccessibleWrap::AppendChild(Accessible* aChild) ApplicationAccessibleWrap::InsertChildAt(uint32_t aIdx, Accessible* aChild)
{ {
if (!ApplicationAccessible::AppendChild(aChild)) if (!ApplicationAccessible::InsertChildAt(aIdx, aChild))
return false; return false;
AtkObject* atkAccessible = AccessibleWrap::GetAtkObject(aChild); AtkObject* atkAccessible = AccessibleWrap::GetAtkObject(aChild);

View File

@ -20,7 +20,7 @@ public:
// Accessible // Accessible
virtual mozilla::a11y::ENameValueFlag Name(nsString& aName); 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); virtual bool RemoveChild(Accessible* aChild);
/** /**

View File

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

View File

@ -333,7 +333,8 @@ public:
/** /**
* Append/insert/remove a child. Return true if operation was successful. * 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 InsertChildAt(uint32_t aIndex, Accessible* aChild);
virtual bool RemoveChild(Accessible* aChild); virtual bool RemoveChild(Accessible* aChild);

View File

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

View File

@ -34,8 +34,6 @@ public:
// Accessible // Accessible
virtual Accessible* ChildAtPoint(int32_t aX, int32_t aY, virtual Accessible* ChildAtPoint(int32_t aX, int32_t aY,
EWhichChildAtPoint aWhichChild); 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 InsertChildAt(uint32_t aIndex, Accessible* aChild) MOZ_OVERRIDE MOZ_FINAL;
virtual bool RemoveChild(Accessible* aChild) MOZ_OVERRIDE MOZ_FINAL; virtual bool RemoveChild(Accessible* aChild) MOZ_OVERRIDE MOZ_FINAL;

View File

@ -149,8 +149,10 @@ OuterDocAccessible::InvalidateChildren()
} }
bool 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, // 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 // and while building the new DOM and frame tree. That's done on purpose
// to avoid weird flashes of default background color. // to avoid weird flashes of default background color.
@ -159,7 +161,7 @@ OuterDocAccessible::AppendChild(Accessible* aAccessible)
if (mChildren.Length()) if (mChildren.Length())
mChildren[0]->Shutdown(); mChildren[0]->Shutdown();
if (!AccessibleWrap::AppendChild(aAccessible)) if (!AccessibleWrap::InsertChildAt(0, aAccessible))
return false; return false;
#ifdef A11Y_LOG #ifdef A11Y_LOG

View File

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

View File

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

View File

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