mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 21:35:39 +00:00
Bug 1172946 - (part 3) Add handling for proxies in mozAccessible children r=tbsaunde
This commit is contained in:
parent
56d3d2ac43
commit
666cbfecb2
@ -44,6 +44,9 @@ GetNativeFromProxy(const ProxyAccessible* aProxy)
|
|||||||
|
|
||||||
ProxyAccessible* GetProxyUnignoredParent(const ProxyAccessible* aProxy);
|
ProxyAccessible* GetProxyUnignoredParent(const ProxyAccessible* aProxy);
|
||||||
|
|
||||||
|
void GetProxyUnignoredChildren(const ProxyAccessible* aProxy,
|
||||||
|
nsTArray<ProxyAccessible*>* aChildrenArray);
|
||||||
|
|
||||||
BOOL IsProxyIgnored(const ProxyAccessible* aProxy);
|
BOOL IsProxyIgnored(const ProxyAccessible* aProxy);
|
||||||
|
|
||||||
} // a11y
|
} // a11y
|
||||||
|
@ -86,6 +86,27 @@ a11y::GetProxyUnignoredParent(const ProxyAccessible* aProxy)
|
|||||||
return parent;
|
return parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
a11y::GetProxyUnignoredChildren(const ProxyAccessible* aProxy,
|
||||||
|
nsTArray<ProxyAccessible*>* aChildrenArray)
|
||||||
|
{
|
||||||
|
if (aProxy->MustPruneChildren())
|
||||||
|
return;
|
||||||
|
|
||||||
|
uint32_t childCount = aProxy->ChildrenCount();
|
||||||
|
for (size_t childIdx = 0; childIdx < childCount; childIdx++) {
|
||||||
|
ProxyAccessible* childProxy = aProxy->ChildAt(childIdx);
|
||||||
|
|
||||||
|
// If element is ignored, then add its children as substitutes.
|
||||||
|
if (IsProxyIgnored(childProxy)) {
|
||||||
|
GetProxyUnignoredChildren(aProxy, aChildrenArray);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
aChildrenArray->AppendElement(childProxy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
a11y::IsProxyIgnored(const ProxyAccessible* aProxy)
|
a11y::IsProxyIgnored(const ProxyAccessible* aProxy)
|
||||||
{
|
{
|
||||||
@ -103,8 +124,8 @@ ConvertToNSArray(nsTArray<Accessible*>& aArray)
|
|||||||
NSMutableArray* nativeArray = [[NSMutableArray alloc] init];
|
NSMutableArray* nativeArray = [[NSMutableArray alloc] init];
|
||||||
|
|
||||||
// iterate through the list, and get each native accessible.
|
// iterate through the list, and get each native accessible.
|
||||||
uint32_t totalCount = aArray.Length();
|
size_t totalCount = aArray.Length();
|
||||||
for (uint32_t i = 0; i < totalCount; i++) {
|
for (size_t i = 0; i < totalCount; i++) {
|
||||||
Accessible* curAccessible = aArray.ElementAt(i);
|
Accessible* curAccessible = aArray.ElementAt(i);
|
||||||
mozAccessible* curNative = GetNativeFromGeckoAccessible(curAccessible);
|
mozAccessible* curNative = GetNativeFromGeckoAccessible(curAccessible);
|
||||||
if (curNative)
|
if (curNative)
|
||||||
@ -114,6 +135,24 @@ ConvertToNSArray(nsTArray<Accessible*>& aArray)
|
|||||||
return nativeArray;
|
return nativeArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// convert an array of Gecko proxy accessibles to an NSArray of native accessibles
|
||||||
|
static inline NSMutableArray*
|
||||||
|
ConvertToNSArray(nsTArray<ProxyAccessible*>& aArray)
|
||||||
|
{
|
||||||
|
NSMutableArray* nativeArray = [[NSMutableArray alloc] init];
|
||||||
|
|
||||||
|
// iterate through the list, and get each native accessible.
|
||||||
|
size_t totalCount = aArray.Length();
|
||||||
|
for (size_t i = 0; i < totalCount; i++) {
|
||||||
|
ProxyAccessible* curAccessible = aArray.ElementAt(i);
|
||||||
|
mozAccessible* curNative = GetNativeFromProxy(curAccessible);
|
||||||
|
if (curNative)
|
||||||
|
[nativeArray addObject:GetObjectOrRepresentedView(curNative)];
|
||||||
|
}
|
||||||
|
|
||||||
|
return nativeArray;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma mark -
|
#pragma mark -
|
||||||
|
|
||||||
@implementation mozAccessible
|
@implementation mozAccessible
|
||||||
@ -689,13 +728,19 @@ ConvertToNSArray(nsTArray<Accessible*>& aArray)
|
|||||||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;
|
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;
|
||||||
|
|
||||||
AccessibleWrap* accWrap = [self getGeckoAccessible];
|
AccessibleWrap* accWrap = [self getGeckoAccessible];
|
||||||
if (mChildren || !accWrap->AreChildrenCached())
|
if (mChildren || (accWrap && !accWrap->AreChildrenCached()))
|
||||||
return mChildren;
|
return mChildren;
|
||||||
|
|
||||||
// get the array of children.
|
// get the array of children.
|
||||||
nsAutoTArray<Accessible*, 10> childrenArray;
|
if (accWrap) {
|
||||||
accWrap->GetUnignoredChildren(&childrenArray);
|
nsAutoTArray<Accessible*, 10> childrenArray;
|
||||||
mChildren = ConvertToNSArray(childrenArray);
|
accWrap->GetUnignoredChildren(&childrenArray);
|
||||||
|
mChildren = ConvertToNSArray(childrenArray);
|
||||||
|
} else if (ProxyAccessible* proxy = [self getProxyAccessible]) {
|
||||||
|
nsAutoTArray<ProxyAccessible*, 10> childrenArray;
|
||||||
|
GetProxyUnignoredChildren(proxy, &childrenArray);
|
||||||
|
mChildren = ConvertToNSArray(childrenArray);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_hakan
|
#ifdef DEBUG_hakan
|
||||||
// make sure we're not returning any ignored accessibles.
|
// make sure we're not returning any ignored accessibles.
|
||||||
|
Loading…
Reference in New Issue
Block a user