shell32: Add stub for IShellItemImageFactory.

Signed-off-by: Jinoh Kang <jinoh.kang.kr@gmail.com>
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Jinoh Kang 2022-04-27 03:17:43 +09:00 committed by Alexandre Julliard
parent b1c26c454a
commit 0ec8a1a456
2 changed files with 50 additions and 1 deletions

View File

@ -39,6 +39,7 @@ typedef struct _ShellItem {
LONG ref;
LPITEMIDLIST pidl;
IPersistIDList IPersistIDList_iface;
IShellItemImageFactory IShellItemImageFactory_iface;
} ShellItem;
typedef struct _CustomDestinationList {
@ -56,6 +57,11 @@ static inline ShellItem *impl_from_IPersistIDList( IPersistIDList *iface )
return CONTAINING_RECORD(iface, ShellItem, IPersistIDList_iface);
}
static inline ShellItem *impl_from_IShellItemImageFactory( IShellItemImageFactory *iface )
{
return CONTAINING_RECORD(iface, ShellItem, IShellItemImageFactory_iface);
}
static inline CustomDestinationList *impl_from_ICustomDestinationList( ICustomDestinationList *iface )
{
return CONTAINING_RECORD(iface, CustomDestinationList, ICustomDestinationList_iface);
@ -79,6 +85,10 @@ static HRESULT WINAPI ShellItem_QueryInterface(IShellItem2 *iface, REFIID riid,
{
*ppv = &This->IPersistIDList_iface;
}
else if (IsEqualIID(&IID_IShellItemImageFactory, riid))
{
*ppv = &This->IShellItemImageFactory_iface;
}
else {
FIXME("not implemented for %s\n", shdebugstr_guid(riid));
*ppv = NULL;
@ -536,6 +546,45 @@ static const IPersistIDListVtbl ShellItem_IPersistIDList_Vtbl = {
ShellItem_IPersistIDList_GetIDList
};
static HRESULT WINAPI ShellItem_IShellItemImageFactory_QueryInterface(IShellItemImageFactory *iface,
REFIID riid, void **ppv)
{
ShellItem *This = impl_from_IShellItemImageFactory(iface);
return IShellItem2_QueryInterface(&This->IShellItem2_iface, riid, ppv);
}
static ULONG WINAPI ShellItem_IShellItemImageFactory_AddRef(IShellItemImageFactory *iface)
{
ShellItem *This = impl_from_IShellItemImageFactory(iface);
return IShellItem2_AddRef(&This->IShellItem2_iface);
}
static ULONG WINAPI ShellItem_IShellItemImageFactory_Release(IShellItemImageFactory *iface)
{
ShellItem *This = impl_from_IShellItemImageFactory(iface);
return IShellItem2_Release(&This->IShellItem2_iface);
}
static HRESULT WINAPI ShellItem_IShellItemImageFactory_GetImage(IShellItemImageFactory *iface,
SIZE size, SIIGBF flags, HBITMAP *phbm)
{
ShellItem *This = impl_from_IShellItemImageFactory(iface);
static int once;
if (!once++)
FIXME("%p ({%lu, %lu} %d %p): stub\n", This, size.cx, size.cy, flags, phbm);
*phbm = NULL;
return E_NOTIMPL;
}
static const IShellItemImageFactoryVtbl ShellItem_IShellItemImageFactory_Vtbl = {
ShellItem_IShellItemImageFactory_QueryInterface,
ShellItem_IShellItemImageFactory_AddRef,
ShellItem_IShellItemImageFactory_Release,
ShellItem_IShellItemImageFactory_GetImage,
};
HRESULT WINAPI IShellItem_Constructor(IUnknown *pUnkOuter, REFIID riid, void **ppv)
{
@ -553,6 +602,7 @@ HRESULT WINAPI IShellItem_Constructor(IUnknown *pUnkOuter, REFIID riid, void **p
This->ref = 1;
This->pidl = NULL;
This->IPersistIDList_iface.lpVtbl = &ShellItem_IPersistIDList_Vtbl;
This->IShellItemImageFactory_iface.lpVtbl = &ShellItem_IShellItemImageFactory_Vtbl;
ret = IShellItem2_QueryInterface(&This->IShellItem2_iface, riid, ppv);
IShellItem2_Release(&This->IShellItem2_iface);

View File

@ -4448,7 +4448,6 @@ static void test_IShellItemImageFactory(void)
ret = IShellItem_QueryInterface(shellitem, &IID_IShellItemImageFactory, (void **)&siif);
IShellItem_Release(shellitem);
todo_wine
ok(ret == S_OK, "QueryInterface returned 0x%08lx\n", ret);
if (SUCCEEDED(ret))
{