зеркало из https://github.com/mozilla/gecko-dev.git
Bug 350063 Window index returned -1 always on calling getIndexInParent
patch by Evan.yan at sun.com r=aaronleventhal
This commit is contained in:
Родитель
3891de9264
Коммит
3768f6338f
|
@ -678,32 +678,41 @@ NS_IMETHODIMP nsAppRootAccessible::GetChildAt(PRInt32 aChildNum,
|
|||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAppRootAccessible::GetChildCount(PRInt32 *aAccChildCount)
|
||||
void nsAppRootAccessible::CacheChildren()
|
||||
{
|
||||
PRUint32 count = 0;
|
||||
nsresult rv = NS_OK;
|
||||
if (mChildren)
|
||||
rv = mChildren->GetLength(&count);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
MAI_LOG_DEBUG(("\nGet Acc Child OK, count=%d\n", count));
|
||||
if (!mChildren) {
|
||||
mAccChildCount = eChildCountUninitialized;
|
||||
return;
|
||||
}
|
||||
else
|
||||
MAI_LOG_DEBUG(("\nGet Acc Child Failed, count=%d\n", count));
|
||||
|
||||
*aAccChildCount = NS_STATIC_CAST(PRInt32, count);
|
||||
return rv;
|
||||
}
|
||||
if (mAccChildCount == eChildCountUninitialized) {
|
||||
nsCOMPtr<nsISimpleEnumerator> enumerator;
|
||||
mChildren->Enumerate(getter_AddRefs(enumerator));
|
||||
|
||||
NS_IMETHODIMP nsAppRootAccessible::GetFirstChild(nsIAccessible * *aFirstChild)
|
||||
{
|
||||
nsCOMPtr<nsIAccessible> firstChild;
|
||||
*aFirstChild = nsnull;
|
||||
nsresult rv = NS_OK;
|
||||
rv = mChildren->QueryElementAt(0, NS_GET_IID(nsIAccessible),
|
||||
getter_AddRefs(firstChild));
|
||||
if (firstChild)
|
||||
NS_IF_ADDREF(*aFirstChild = firstChild);
|
||||
return rv;
|
||||
nsCOMPtr<nsIWeakReference> childWeakRef;
|
||||
nsCOMPtr<nsIAccessible> accessible;
|
||||
nsCOMPtr<nsPIAccessible> previousAccessible;
|
||||
PRBool hasMoreElements;
|
||||
while(NS_SUCCEEDED(enumerator->HasMoreElements(&hasMoreElements))
|
||||
&& hasMoreElements) {
|
||||
enumerator->GetNext(getter_AddRefs(childWeakRef));
|
||||
accessible = do_QueryReferent(childWeakRef);
|
||||
if (accessible) {
|
||||
if (previousAccessible) {
|
||||
previousAccessible->SetNextSibling(accessible);
|
||||
}
|
||||
else {
|
||||
SetFirstChild(accessible);
|
||||
}
|
||||
previousAccessible = do_QueryInterface(accessible);
|
||||
previousAccessible->SetParent(this);
|
||||
}
|
||||
}
|
||||
|
||||
PRUint32 count = 0;
|
||||
mChildren->GetLength(&count);
|
||||
mAccChildCount = NS_STATIC_CAST(PRInt32, count);
|
||||
}
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAppRootAccessible::GetNextSibling(nsIAccessible * *aNextSibling)
|
||||
|
@ -746,6 +755,7 @@ nsAppRootAccessible::AddRootAccessible(nsIAccessible *aRootAccWrap)
|
|||
|
||||
// add by weak reference
|
||||
rv = mChildren->AppendElement(aRootAccWrap, PR_TRUE);
|
||||
InvalidateChildren();
|
||||
|
||||
void* atkAccessible;
|
||||
aRootAccWrap->GetNativeInterface(&atkAccessible);
|
||||
|
@ -803,6 +813,7 @@ nsAppRootAccessible::RemoveRootAccessible(nsIAccessible *aRootAccWrap)
|
|||
rv = mChildren->RemoveElementAt(index);
|
||||
|
||||
#endif
|
||||
InvalidateChildren();
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
|
|
@ -86,14 +86,15 @@ public:
|
|||
NS_IMETHOD GetPreviousSibling(nsIAccessible **aPreviousSibling);
|
||||
NS_IMETHOD GetChildAt(PRInt32 aChildNum, nsIAccessible **aChild);
|
||||
|
||||
NS_IMETHOD GetFirstChild(nsIAccessible * *aFirstChild);
|
||||
NS_IMETHOD GetChildCount(PRInt32 *aAccChildCount);
|
||||
|
||||
// return the atk object for app root accessible
|
||||
NS_IMETHOD GetNativeInterface(void **aOutAccessible);
|
||||
|
||||
nsresult AddRootAccessible(nsIAccessible *aRootAccWrap);
|
||||
nsresult RemoveRootAccessible(nsIAccessible *aRootAccWrap);
|
||||
|
||||
protected:
|
||||
virtual void CacheChildren();
|
||||
|
||||
private:
|
||||
nsCOMPtr<nsIMutableArray> mChildren;
|
||||
};
|
||||
|
|
|
@ -489,7 +489,7 @@ NS_IMETHODIMP nsAccessible::Shutdown()
|
|||
NS_IMETHODIMP nsAccessible::InvalidateChildren()
|
||||
{
|
||||
// Document has transformed, reset our invalid children and child count
|
||||
mAccChildCount = -1;
|
||||
mAccChildCount = eChildCountUninitialized;
|
||||
mFirstChild = nsnull;
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -667,7 +667,7 @@ void nsAccessible::CacheChildren()
|
|||
{
|
||||
if (!mWeakShell) {
|
||||
// This node has been shut down
|
||||
mAccChildCount = -1;
|
||||
mAccChildCount = eChildCountUninitialized;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1968,7 +1968,7 @@ NS_IMETHODIMP nsAccessible::GetFinalState(PRUint32 *aState)
|
|||
if (!content) {
|
||||
return NS_ERROR_FAILURE; // Node already shut down
|
||||
}
|
||||
for (PRInt32 index = 0; index < NS_ARRAY_LENGTH(gUnivStateMap); index ++) {
|
||||
for (PRUint32 index = 0; index < NS_ARRAY_LENGTH(gUnivStateMap); index ++) {
|
||||
MappedAttrState(content, aState, &gUnivStateMap[index]);
|
||||
}
|
||||
if (!mRoleMapEntry) {
|
||||
|
|
|
@ -495,7 +495,7 @@ void nsHTMLGroupboxAccessible::CacheChildren()
|
|||
{
|
||||
if (!mWeakShell) {
|
||||
// This node has been shut down
|
||||
mAccChildCount = -1;
|
||||
mAccChildCount = eChildCountUninitialized;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -174,7 +174,7 @@ void nsHTMLImageAccessible::CacheChildren()
|
|||
{
|
||||
if (!mWeakShell) {
|
||||
// This node has been shut down
|
||||
mAccChildCount = -1;
|
||||
mAccChildCount = eChildCountUninitialized;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -606,7 +606,7 @@ void nsXULComboboxAccessible::CacheChildren()
|
|||
{
|
||||
if (!mWeakShell) {
|
||||
// This node has been shut down
|
||||
mAccChildCount = -1;
|
||||
mAccChildCount = eChildCountUninitialized;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче