Signed-off-by: Connor McAdams cmcadams@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; }