[PATCH v2 2/3] uiautomationcore: Implement UiaGetReservedMixedAttributeValue.

Connor McAdams cmcadams at codeweavers.com
Thu Oct 28 10:17:29 CDT 2021


Signed-off-by: Connor McAdams <cmcadams at codeweavers.com>
---
 dlls/uiautomationcore/uia_main.c | 58 ++++++++++++++++++++++++++++++--
 1 file changed, 56 insertions(+), 2 deletions(-)

diff --git a/dlls/uiautomationcore/uia_main.c b/dlls/uiautomationcore/uia_main.c
index 51c220c6041..17ddc19016f 100644
--- a/dlls/uiautomationcore/uia_main.c
+++ b/dlls/uiautomationcore/uia_main.c
@@ -35,6 +35,7 @@ struct uia_rsrv_ftmarshaler
 };
 
 static struct uia_rsrv_ftmarshaler *uia_rsrv_ns_val_ftmarshaler = NULL;
+static struct uia_rsrv_ftmarshaler *uia_rsrv_ma_val_ftmarshaler = NULL;
 
 static struct uia_rsrv_ftmarshaler *impl_uia_rsrv_ftmarshaler_from_IUnknown(IUnknown *iface)
 {
@@ -69,6 +70,8 @@ static ULONG WINAPI uia_rsrv_ftmarshaler_Release(IUnknown *iface)
     {
         if (marshaler == uia_rsrv_ns_val_ftmarshaler)
             uia_rsrv_ns_val_ftmarshaler = NULL;
+        else if (marshaler == uia_rsrv_ma_val_ftmarshaler)
+            uia_rsrv_ma_val_ftmarshaler = NULL;
 
         IUnknown_Release(marshaler->inner);
         heap_free(marshaler);
@@ -160,6 +163,52 @@ static const IUnknownVtbl uia_reserved_ns_vtbl = {
 
 static IUnknown uia_reserved_ns_iface = {&uia_reserved_ns_vtbl};
 
+/*
+ * UiaReservedMixedAttribute object.
+ */
+static HRESULT WINAPI uia_reserved_ma_QueryInterface(IUnknown *iface,
+        REFIID riid, void **ppv)
+{
+    *ppv = NULL;
+    if (IsEqualIID(riid, &IID_IUnknown))
+        *ppv = iface;
+    else if (IsEqualIID(riid, &IID_IMarshal))
+    {
+        if (!uia_rsrv_ma_val_ftmarshaler)
+        {
+            if (FAILED(uia_rsrv_val_create_ftmarshaler(iface, &uia_rsrv_ma_val_ftmarshaler)))
+                return E_NOINTERFACE;
+        }
+
+        if (FAILED(IUnknown_QueryInterface(uia_rsrv_ma_val_ftmarshaler->inner, riid, ppv)))
+            return E_NOINTERFACE;
+
+        IUnknown_Release(&uia_rsrv_ma_val_ftmarshaler->IUnknown_iface);
+    }
+    else
+        return E_NOINTERFACE;
+
+    return S_OK;
+}
+
+static ULONG WINAPI uia_reserved_ma_AddRef(IUnknown *iface)
+{
+    return 1;
+}
+
+static ULONG WINAPI uia_reserved_ma_Release(IUnknown *iface)
+{
+    return 1;
+}
+
+static const IUnknownVtbl uia_reserved_ma_vtbl = {
+    uia_reserved_ma_QueryInterface,
+    uia_reserved_ma_AddRef,
+    uia_reserved_ma_Release,
+};
+
+static IUnknown uia_reserved_ma_iface = {&uia_reserved_ma_vtbl};
+
 /***********************************************************************
  *          UiaClientsAreListening (uiautomationcore.@)
  */
@@ -174,8 +223,13 @@ BOOL WINAPI UiaClientsAreListening(void)
  */
 HRESULT WINAPI UiaGetReservedMixedAttributeValue(IUnknown **value)
 {
-    FIXME("(%p) stub!\n", value);
-    *value = NULL;
+    TRACE("(%p)\n", value);
+
+    if (!value)
+        return E_INVALIDARG;
+
+    *value = &uia_reserved_ma_iface;
+
     return S_OK;
 }
 
-- 
2.25.1




More information about the wine-devel mailing list