oleacc: Added AccessibleChildren implementation.

This commit is contained in:
Piotr Caban 2015-03-21 11:26:09 +01:00 committed by Alexandre Julliard
parent 15e13220f1
commit 88b5b6a51e
2 changed files with 48 additions and 1 deletions

View file

@ -568,3 +568,50 @@ UINT WINAPI GetStateTextA(DWORD state_bit, CHAR *state_str, UINT state_str_len)
return LoadStringA(oleacc_handle, state_id, tmp, sizeof(tmp));
}
}
HRESULT WINAPI AccessibleChildren(IAccessible *container,
LONG start, LONG count, VARIANT *children, LONG *children_cnt)
{
IEnumVARIANT *ev;
LONG i, child_no;
HRESULT hr;
TRACE("%p %d %d %p %p\n", container, start, count, children, children_cnt);
if(!container || !children || !children_cnt)
return E_INVALIDARG;
for(i=0; i<count; i++)
VariantInit(children+i);
hr = IAccessible_QueryInterface(container, &IID_IEnumVARIANT, (void**)&ev);
if(SUCCEEDED(hr)) {
hr = IEnumVARIANT_Reset(ev);
if(SUCCEEDED(hr))
hr = IEnumVARIANT_Skip(ev, start);
if(SUCCEEDED(hr))
hr = IEnumVARIANT_Next(ev, count, children, (ULONG*)children_cnt);
IEnumVARIANT_Release(ev);
return hr;
}
hr = IAccessible_get_accChildCount(container, &child_no);
if(FAILED(hr))
return hr;
for(i=0; i<count && start+i+1<=child_no; i++) {
IDispatch *disp;
V_VT(children+i) = VT_I4;
V_I4(children+i) = start+i+1;
hr = IAccessible_get_accChild(container, children[i], &disp);
if(SUCCEEDED(hr) && disp) {
V_VT(children+i) = VT_DISPATCH;
V_DISPATCH(children+i) = disp;
}
}
*children_cnt = i;
return i==count ? S_OK : S_FALSE;
}

View file

@ -1,4 +1,4 @@
@ stub AccessibleChildren
@ stdcall AccessibleChildren(ptr long long ptr ptr)
@ stub AccessibleObjectFromEvent
@ stdcall AccessibleObjectFromPoint(int64 ptr ptr)
@ stdcall AccessibleObjectFromWindow(ptr long ptr ptr)