wintypes: Add stubs for IMap<HSTRING, IInspectable *>, IObservableMap<HSTRING, IInspectable *>, IIterable<IKeyValuePair<HSTRING, IInspectable *>> to PropertySet implementation.

This commit is contained in:
Vibhav Pant 2024-11-03 01:11:29 +05:30
parent 84a240babb
commit 7f2bb2cb46
No known key found for this signature in database
GPG key ID: E3FB28CB6AB59598
2 changed files with 164 additions and 3 deletions

View file

@ -31,6 +31,9 @@ WINE_DEFAULT_DEBUG_CHANNEL( wintypes );
struct propertyset
{
IPropertySet IPropertySet_iface;
IObservableMap_HSTRING_IInspectable IObservableMap_HSTRING_IInspectable_iface;
IMap_HSTRING_IInspectable IMap_HSTRING_IInspectable_iface;
IIterable_IKeyValuePair_HSTRING_IInspectable IIterable_IKeyValuePair_HSTRING_IInspectable_iface;
LONG ref;
};
@ -42,8 +45,11 @@ static inline struct propertyset *impl_from_IPropertySet( IPropertySet *iface )
static HRESULT STDMETHODCALLTYPE propertyset_QueryInterface( IPropertySet *iface, REFIID iid,
void **out )
{
struct propertyset *impl;
TRACE( "(%p, %s, %p)\n", iface, debugstr_guid( iid ), out );
impl = impl_from_IPropertySet( iface );
*out = NULL;
if (IsEqualGUID( iid, &IID_IUnknown ) ||
IsEqualGUID( iid, &IID_IInspectable ) ||
@ -53,6 +59,24 @@ static HRESULT STDMETHODCALLTYPE propertyset_QueryInterface( IPropertySet *iface
IUnknown_AddRef( (IUnknown *)*out );
return S_OK;
}
if (IsEqualGUID( iid, &IID_IObservableMap_HSTRING_IInspectable ))
{
*out = &impl->IObservableMap_HSTRING_IInspectable_iface;
IUnknown_AddRef( (IUnknown *)*out );
return S_OK;
}
if (IsEqualGUID( iid, &IID_IMap_HSTRING_IInspectable ))
{
*out = &impl->IMap_HSTRING_IInspectable_iface;
IUnknown_AddRef( (IUnknown *)iface );
return S_OK;
}
if (IsEqualGUID( iid, &IID_IIterable_IKeyValuePair_HSTRING_IInspectable ))
{
*out = &impl->IIterable_IKeyValuePair_HSTRING_IInspectable_iface;
IUnknown_AddRef( (IUnknown *)iface );
return S_OK;
}
FIXME( "%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid( iid ) );
return E_NOINTERFACE;
@ -116,6 +140,140 @@ static const IPropertySetVtbl propertyset_vtbl =
propertyset_GetTrustLevel,
};
DEFINE_IINSPECTABLE( propertyset_IObservableMap, IObservableMap_HSTRING_IInspectable,
struct propertyset, IPropertySet_iface );
static HRESULT STDMETHODCALLTYPE propertyset_IObservableMap_add_MapChanged(
IObservableMap_HSTRING_IInspectable *iface,
IMapChangedEventHandler_HSTRING_IInspectable *handler, EventRegistrationToken *token )
{
FIXME( "(%p, %p, %p) stub!\n", iface, handler, token );
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE propertyset_IObservableMap_remove_MapChanged(
IObservableMap_HSTRING_IInspectable *iface, EventRegistrationToken token )
{
FIXME( "(%p, %I64d) stub!\n", iface, token.value );
return E_NOTIMPL;
}
const static IObservableMap_HSTRING_IInspectableVtbl propertyset_IObservableMap_vtbl =
{
/* IUnknown */
propertyset_IObservableMap_QueryInterface,
propertyset_IObservableMap_AddRef,
propertyset_IObservableMap_Release,
/* IInspectable */
propertyset_IObservableMap_GetIids,
propertyset_IObservableMap_GetRuntimeClassName,
propertyset_IObservableMap_GetTrustLevel,
/* IObservableMap<HSTRING, IInspectable*> */
propertyset_IObservableMap_add_MapChanged,
propertyset_IObservableMap_remove_MapChanged,
};
DEFINE_IINSPECTABLE( propertyset_IMap, IMap_HSTRING_IInspectable, struct propertyset,
IPropertySet_iface );
static HRESULT STDMETHODCALLTYPE propertyset_Lookup( IMap_HSTRING_IInspectable *iface,
HSTRING key,
IInspectable **value )
{
FIXME( "(%p, %s, %p) stub!\n", iface, debugstr_hstring( key ), value );
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE
propertyset_get_size( IMap_HSTRING_IInspectable *iface, UINT32 *size )
{
FIXME( "(%p, %p) stub!\n", iface, size );
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE propertyset_HasKey( IMap_HSTRING_IInspectable *iface,
HSTRING key, boolean *exists )
{
FIXME( "(%p, %s, %p) stub!\n", iface, debugstr_hstring( key ), exists );
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE propertyset_GetView(
IMap_HSTRING_IInspectable *iface, IMapView_HSTRING_IInspectable **view )
{
FIXME( "(%p, %p) stub!\n", iface, view );
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE propertyset_Insert( IMap_HSTRING_IInspectable *iface,
HSTRING key, IInspectable *value,
boolean *replaced )
{
FIXME( "(%p, %s, %p, %p) stub!\n", iface, debugstr_hstring( key ), value, replaced );
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE propertyset_Remove( IMap_HSTRING_IInspectable *iface,
HSTRING key )
{
FIXME( "(%p, %s) stub!\n", iface, debugstr_hstring( key ) );
return E_NOTIMPL;
}
static HRESULT STDMETHODCALLTYPE propertyset_Clear( IMap_HSTRING_IInspectable *iface )
{
FIXME( "(%p) stub!\n", iface );
return E_NOTIMPL;
}
const static IMap_HSTRING_IInspectableVtbl propertyset_IMap_vtbl =
{
/* IUnknown */
propertyset_IMap_QueryInterface,
propertyset_IMap_AddRef,
propertyset_IMap_Release,
/* IInspectable */
propertyset_IMap_GetIids,
propertyset_IMap_GetRuntimeClassName,
propertyset_IMap_GetTrustLevel,
/* IMap<HSTRING, IInspectable*> */
propertyset_Lookup,
propertyset_get_size,
propertyset_HasKey,
propertyset_GetView,
propertyset_Insert,
propertyset_Remove,
propertyset_Clear,
};
DEFINE_IINSPECTABLE_( iterable_kvpair_HSTRING_IInspectable,
IIterable_IKeyValuePair_HSTRING_IInspectable, struct propertyset,
impl_from_IIterable_IKeyValuePair_HSTRING_IInspectable,
IIterable_IKeyValuePair_HSTRING_IInspectable_iface,
&impl->IMap_HSTRING_IInspectable_iface );
static HRESULT STDMETHODCALLTYPE
iterable_kvpair_HSTRING_IInspectable_First( IIterable_IKeyValuePair_HSTRING_IInspectable *iface,
IIterator_IKeyValuePair_HSTRING_IInspectable **iter )
{
FIXME( "(%p, %p) stub!\n", iface, iter );
return E_NOTIMPL;
}
const static IIterable_IKeyValuePair_HSTRING_IInspectableVtbl iterable_kvpair_HSTRING_IInspectable_vtbl =
{
/* IUnknown */
iterable_kvpair_HSTRING_IInspectable_QueryInterface,
iterable_kvpair_HSTRING_IInspectable_AddRef,
iterable_kvpair_HSTRING_IInspectable_Release,
/* IInspectable */
iterable_kvpair_HSTRING_IInspectable_GetIids,
iterable_kvpair_HSTRING_IInspectable_GetRuntimeClassName,
iterable_kvpair_HSTRING_IInspectable_GetTrustLevel,
/* IIterable<IKeyValuePair<HSTRING, IInspectable*>> */
iterable_kvpair_HSTRING_IInspectable_First
};
struct propertyset_factory
{
IActivationFactory IActivationFactory_iface;
@ -180,6 +338,9 @@ static HRESULT STDMETHODCALLTYPE factory_ActivateInstance( IActivationFactory *i
return E_OUTOFMEMORY;
impl->IPropertySet_iface.lpVtbl = &propertyset_vtbl;
impl->IObservableMap_HSTRING_IInspectable_iface.lpVtbl = &propertyset_IObservableMap_vtbl;
impl->IMap_HSTRING_IInspectable_iface.lpVtbl = &propertyset_IMap_vtbl;
impl->IIterable_IKeyValuePair_HSTRING_IInspectable_iface.lpVtbl = &iterable_kvpair_HSTRING_IInspectable_vtbl;
impl->ref = 1;
*instance = (IInspectable *)&impl->IPropertySet_iface;
return S_OK;

View file

@ -77,7 +77,7 @@ static void test_IPropertySet(void)
}
hr = IPropertySet_QueryInterface( propset, &IID_IMap_HSTRING_IInspectable, (void **)&map );
todo_wine ok( SUCCEEDED( hr ), "QueryInterface failed, got %#lx\n", hr );
ok( SUCCEEDED( hr ), "QueryInterface failed, got %#lx\n", hr );
if (FAILED( hr ))
{
RoUninitialize();
@ -87,11 +87,11 @@ static void test_IPropertySet(void)
hr = IPropertySet_QueryInterface( propset, &IID_IObservableMap_HSTRING_IInspectable,
(void *)&observable_map );
IPropertySet_Release(propset);
todo_wine ok(SUCCEEDED(hr), "QueryInterface failed, got %#lx\n", hr);
ok(SUCCEEDED(hr), "QueryInterface failed, got %#lx\n", hr);
hr = IMap_HSTRING_IInspectable_QueryInterface( map, &IID_IIterable_IKeyValuePair_HSTRING_IInspectable,
(void **)&iterable );
todo_wine ok( SUCCEEDED( hr ), "QueryInterface failed, got %#lx\n", hr );
ok( SUCCEEDED( hr ), "QueryInterface failed, got %#lx\n", hr );
if (SUCCEEDED( hr ))
{
hr = IIterable_IKeyValuePair_HSTRING_IInspectable_First( iterable, &iterator );