From 4e9b298abf18b5429e83b66e46a52cf1a3e31056 Mon Sep 17 00:00:00 2001 From: Trevor Saunders Date: Thu, 14 Mar 2013 00:53:28 -0400 Subject: [PATCH] bug 850981 - make AppendChild inline around InsertChildAt() r=surkov --- .../src/atk/ApplicationAccessibleWrap.cpp | 4 +-- .../src/atk/ApplicationAccessibleWrap.h | 2 +- accessible/src/generic/Accessible.cpp | 36 +++++++------------ accessible/src/generic/Accessible.h | 3 +- accessible/src/generic/BaseAccessibles.cpp | 7 ---- accessible/src/generic/BaseAccessibles.h | 2 -- accessible/src/generic/OuterDocAccessible.cpp | 6 ++-- accessible/src/generic/OuterDocAccessible.h | 2 +- accessible/src/mac/AccessibleWrap.h | 2 +- accessible/src/mac/AccessibleWrap.mm | 9 +++-- 10 files changed, 28 insertions(+), 45 deletions(-) diff --git a/accessible/src/atk/ApplicationAccessibleWrap.cpp b/accessible/src/atk/ApplicationAccessibleWrap.cpp index f1070eec7c4..72236a4e735 100644 --- a/accessible/src/atk/ApplicationAccessibleWrap.cpp +++ b/accessible/src/atk/ApplicationAccessibleWrap.cpp @@ -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); diff --git a/accessible/src/atk/ApplicationAccessibleWrap.h b/accessible/src/atk/ApplicationAccessibleWrap.h index 5fc00ef85b8..e1623e0e614 100644 --- a/accessible/src/atk/ApplicationAccessibleWrap.h +++ b/accessible/src/atk/ApplicationAccessibleWrap.h @@ -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); /** diff --git a/accessible/src/generic/Accessible.cpp b/accessible/src/generic/Accessible.cpp index 95a1d0f8aa6..dd212d9b103 100644 --- a/accessible/src/generic/Accessible.cpp +++ b/accessible/src/generic/Accessible.cpp @@ -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; } diff --git a/accessible/src/generic/Accessible.h b/accessible/src/generic/Accessible.h index 098293509db..74ef234035f 100644 --- a/accessible/src/generic/Accessible.h +++ b/accessible/src/generic/Accessible.h @@ -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); diff --git a/accessible/src/generic/BaseAccessibles.cpp b/accessible/src/generic/BaseAccessibles.cpp index 4935dcba04b..0a42d9e6112 100644 --- a/accessible/src/generic/BaseAccessibles.cpp +++ b/accessible/src/generic/BaseAccessibles.cpp @@ -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) { diff --git a/accessible/src/generic/BaseAccessibles.h b/accessible/src/generic/BaseAccessibles.h index 5288b0e2dd4..185bb17ac47 100644 --- a/accessible/src/generic/BaseAccessibles.h +++ b/accessible/src/generic/BaseAccessibles.h @@ -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; diff --git a/accessible/src/generic/OuterDocAccessible.cpp b/accessible/src/generic/OuterDocAccessible.cpp index 6ad340ffce5..d8a43e3ea6b 100644 --- a/accessible/src/generic/OuterDocAccessible.cpp +++ b/accessible/src/generic/OuterDocAccessible.cpp @@ -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 diff --git a/accessible/src/generic/OuterDocAccessible.h b/accessible/src/generic/OuterDocAccessible.h index 86dc45e344d..70e85d46b63 100644 --- a/accessible/src/generic/OuterDocAccessible.h +++ b/accessible/src/generic/OuterDocAccessible.h @@ -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 diff --git a/accessible/src/mac/AccessibleWrap.h b/accessible/src/mac/AccessibleWrap.h index a8885f7e64d..9eb62f7871c 100644 --- a/accessible/src/mac/AccessibleWrap.h +++ b/accessible/src/mac/AccessibleWrap.h @@ -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); diff --git a/accessible/src/mac/AccessibleWrap.mm b/accessible/src/mac/AccessibleWrap.mm index 87b53380ae8..9a8d521c181 100644 --- a/accessible/src/mac/AccessibleWrap.mm +++ b/accessible/src/mac/AccessibleWrap.mm @@ -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