Bug 350063 Window index returned -1 always on calling getIndexInParent

patch by Evan.yan at sun.com r=aaronleventhal
This commit is contained in:
ginn.chen%sun.com 2006-09-11 06:18:06 +00:00
Родитель 3891de9264
Коммит 3768f6338f
6 изменённых файлов: 43 добавлений и 31 удалений

Просмотреть файл

@ -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;
}