diff --git a/accessible/src/base/nsAccessible.cpp b/accessible/src/base/nsAccessible.cpp index 1621542f4493..085856f1dc3a 100644 --- a/accessible/src/base/nsAccessible.cpp +++ b/accessible/src/base/nsAccessible.cpp @@ -211,6 +211,7 @@ nsresult nsAccessible::QueryInterface(REFNSIID aIID, void** aInstancePtr) nsIContent::ATTR_VALUE_NO_MATCH) { *aInstancePtr = static_cast(this); NS_ADDREF_THIS(); + return NS_OK; } } } @@ -219,6 +220,7 @@ nsresult nsAccessible::QueryInterface(REFNSIID aIID, void** aInstancePtr) if (mRoleMapEntry && mRoleMapEntry->valueRule != eNoValue) { *aInstancePtr = static_cast(this); NS_ADDREF_THIS(); + return NS_OK; } } diff --git a/accessible/src/base/nsDocAccessible.cpp b/accessible/src/base/nsDocAccessible.cpp index b87e0c31d19e..774ad515f55a 100644 --- a/accessible/src/base/nsDocAccessible.cpp +++ b/accessible/src/base/nsDocAccessible.cpp @@ -1770,6 +1770,18 @@ NS_IMETHODIMP nsDocAccessible::InvalidateCacheSubtree(nsIContent *aChild, } } + if (!isShowing) { + // Fire an event so the assistive technology knows the children have changed + // This is only used by older MSAA clients. Newer ones should derive this + // from SHOW and HIDE so that they don't fetch extra objects + if (childAccessible) { + nsCOMPtr reorderEvent = + new nsAccEvent(nsIAccessibleEvent::EVENT_REORDER, containerAccessible, nsnull, PR_TRUE); + NS_ENSURE_TRUE(reorderEvent, NS_ERROR_OUT_OF_MEMORY); + FireDelayedAccessibleEvent(reorderEvent, eCoalesceFromSameSubtree, isAsynch); + } + } + return NS_OK; }