Piotr Caban : oleacc: Added AccessibleChildren implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Mar 23 10:03:19 CDT 2015
Module: wine
Branch: master
Commit: 88b5b6a51ed532214541bb8e097a5eba994064c5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=88b5b6a51ed532214541bb8e097a5eba994064c5
Author: Piotr Caban <piotr at codeweavers.com>
Date: Sat Mar 21 11:26:09 2015 +0100
oleacc: Added AccessibleChildren implementation.
---
dlls/oleacc/main.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
dlls/oleacc/oleacc.spec | 2 +-
2 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/dlls/oleacc/main.c b/dlls/oleacc/main.c
index fa7d592..4d9c55e 100644
--- a/dlls/oleacc/main.c
+++ b/dlls/oleacc/main.c
@@ -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;
+}
diff --git a/dlls/oleacc/oleacc.spec b/dlls/oleacc/oleacc.spec
index 9f3a9a0..4cff0b8 100644
--- a/dlls/oleacc/oleacc.spec
+++ b/dlls/oleacc/oleacc.spec
@@ -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)
More information about the wine-cvs
mailing list