[PATCH 1/3] uiautomationcore: Add stub IRawElementProviderFragment for MSAA providers.

Connor McAdams wine at gitlab.winehq.org
Sat Jun 11 16:57:52 CDT 2022


From: Connor McAdams <cmcadams at codeweavers.com>

Signed-off-by: Connor McAdams <cmcadams at codeweavers.com>
---
 dlls/uiautomationcore/uia_provider.c | 89 ++++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)

diff --git a/dlls/uiautomationcore/uia_provider.c b/dlls/uiautomationcore/uia_provider.c
index 9d8d44c90fd..8701d67a89f 100644
--- a/dlls/uiautomationcore/uia_provider.c
+++ b/dlls/uiautomationcore/uia_provider.c
@@ -289,6 +289,7 @@ static LONG msaa_role_to_uia_control_type(LONG role)
  */
 struct msaa_provider {
     IRawElementProviderSimple IRawElementProviderSimple_iface;
+    IRawElementProviderFragment IRawElementProviderFragment_iface;
     ILegacyIAccessibleProvider ILegacyIAccessibleProvider_iface;
     LONG refcount;
 
@@ -336,6 +337,8 @@ HRESULT WINAPI msaa_provider_QueryInterface(IRawElementProviderSimple *iface, RE
     *ppv = NULL;
     if (IsEqualIID(riid, &IID_IRawElementProviderSimple) || IsEqualIID(riid, &IID_IUnknown))
         *ppv = iface;
+    else if (IsEqualIID(riid, &IID_IRawElementProviderFragment))
+        *ppv = &msaa_prov->IRawElementProviderFragment_iface;
     else if (IsEqualIID(riid, &IID_ILegacyIAccessibleProvider))
         *ppv = &msaa_prov->ILegacyIAccessibleProvider_iface;
     else
@@ -481,6 +484,91 @@ static const IRawElementProviderSimpleVtbl msaa_provider_vtbl = {
     msaa_provider_get_HostRawElementProvider,
 };
 
+/*
+ * IRawElementProviderFragment interface for UiaProviderFromIAccessible
+ * providers.
+ */
+static inline struct msaa_provider *impl_from_msaa_fragment(IRawElementProviderFragment *iface)
+{
+    return CONTAINING_RECORD(iface, struct msaa_provider, IRawElementProviderFragment_iface);
+}
+
+static HRESULT WINAPI msaa_fragment_QueryInterface(IRawElementProviderFragment *iface, REFIID riid,
+        void **ppv)
+{
+    struct msaa_provider *msaa_prov = impl_from_msaa_fragment(iface);
+    return IRawElementProviderSimple_QueryInterface(&msaa_prov->IRawElementProviderSimple_iface, riid, ppv);
+}
+
+static ULONG WINAPI msaa_fragment_AddRef(IRawElementProviderFragment *iface)
+{
+    struct msaa_provider *msaa_prov = impl_from_msaa_fragment(iface);
+    return IRawElementProviderSimple_AddRef(&msaa_prov->IRawElementProviderSimple_iface);
+}
+
+static ULONG WINAPI msaa_fragment_Release(IRawElementProviderFragment *iface)
+{
+    struct msaa_provider *msaa_prov = impl_from_msaa_fragment(iface);
+    return IRawElementProviderSimple_Release(&msaa_prov->IRawElementProviderSimple_iface);
+}
+
+static HRESULT WINAPI msaa_fragment_Navigate(IRawElementProviderFragment *iface,
+        enum NavigateDirection direction, IRawElementProviderFragment **ret_val)
+{
+    FIXME("%p, %d, %p: stub!\n", iface, direction, ret_val);
+    *ret_val = NULL;
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI msaa_fragment_GetRuntimeId(IRawElementProviderFragment *iface,
+        SAFEARRAY **ret_val)
+{
+    FIXME("%p, %p: stub!\n", iface, ret_val);
+    *ret_val = NULL;
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI msaa_fragment_get_BoundingRectangle(IRawElementProviderFragment *iface,
+        struct UiaRect *ret_val)
+{
+    FIXME("%p, %p: stub!\n", iface, ret_val);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI msaa_fragment_GetEmbeddedFragmentRoots(IRawElementProviderFragment *iface,
+        SAFEARRAY **ret_val)
+{
+    FIXME("%p, %p: stub!\n", iface, ret_val);
+    *ret_val = NULL;
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI msaa_fragment_SetFocus(IRawElementProviderFragment *iface)
+{
+    FIXME("%p: stub!\n", iface);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI msaa_fragment_get_FragmentRoot(IRawElementProviderFragment *iface,
+        IRawElementProviderFragmentRoot **ret_val)
+{
+    FIXME("%p, %p: stub!\n", iface, ret_val);
+    *ret_val = NULL;
+    return E_NOTIMPL;
+}
+
+static const IRawElementProviderFragmentVtbl msaa_fragment_vtbl = {
+    msaa_fragment_QueryInterface,
+    msaa_fragment_AddRef,
+    msaa_fragment_Release,
+    msaa_fragment_Navigate,
+    msaa_fragment_GetRuntimeId,
+    msaa_fragment_get_BoundingRectangle,
+    msaa_fragment_GetEmbeddedFragmentRoots,
+    msaa_fragment_SetFocus,
+    msaa_fragment_get_FragmentRoot,
+};
+
 /*
  * ILegacyIAccessibleProvider interface for UiaProviderFromIAccessible
  * providers.
@@ -682,6 +770,7 @@ HRESULT WINAPI UiaProviderFromIAccessible(IAccessible *acc, long child_id, DWORD
         return E_OUTOFMEMORY;
 
     msaa_prov->IRawElementProviderSimple_iface.lpVtbl = &msaa_provider_vtbl;
+    msaa_prov->IRawElementProviderFragment_iface.lpVtbl = &msaa_fragment_vtbl;
     msaa_prov->ILegacyIAccessibleProvider_iface.lpVtbl = &msaa_acc_provider_vtbl;
     msaa_prov->refcount = 1;
     msaa_prov->hwnd = hwnd;
-- 
GitLab


https://gitlab.winehq.org/wine/wine/-/merge_requests/230



More information about the wine-devel mailing list