[PATCH 3/5] shell32: Add stub for IShellItemImageFactory.
Jinoh Kang
jinoh.kang.kr at gmail.com
Mon Mar 14 13:09:02 CDT 2022
Signed-off-by: Jinoh Kang <jinoh.kang.kr at gmail.com>
---
dlls/shell32/shellitem.c | 50 ++++++++++++++++++++++++++++++++++
dlls/shell32/tests/shlfolder.c | 2 +-
2 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/dlls/shell32/shellitem.c b/dlls/shell32/shellitem.c
index 0a3a76cbd6a..e85e31bce10 100644
--- a/dlls/shell32/shellitem.c
+++ b/dlls/shell32/shellitem.c
@@ -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} %lu %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)
{
@@ -552,6 +601,7 @@ HRESULT WINAPI IShellItem_Constructor(IUnknown *pUnkOuter, REFIID riid, void **p
This->IShellItem2_iface.lpVtbl = &ShellItem2_Vtbl;
This->ref = 1;
This->pidl = NULL;
+ This->IShellItemImageFactory_iface.lpVtbl = &ShellItem_IShellItemImageFactory_Vtbl;
This->IPersistIDList_iface.lpVtbl = &ShellItem_IPersistIDList_Vtbl;
ret = IShellItem2_QueryInterface(&This->IShellItem2_iface, riid, ppv);
diff --git a/dlls/shell32/tests/shlfolder.c b/dlls/shell32/tests/shlfolder.c
index b52f423bd9a..43f115af1f8 100644
--- a/dlls/shell32/tests/shlfolder.c
+++ b/dlls/shell32/tests/shlfolder.c
@@ -4504,7 +4504,7 @@ static void test_IShellItemImageFactory(void)
{
IShellItemImageFactory *siif;
ret = IShellItem_QueryInterface(shellitem, &IID_IShellItemImageFactory, (void **)&siif);
- todo_wine ok(ret == S_OK, "QueryInterface returned %lx\n", ret);
+ ok(ret == S_OK, "QueryInterface returned %lx\n", ret);
if (SUCCEEDED(ret))
{
HBITMAP hbm = NULL;
--
2.34.1
More information about the wine-devel
mailing list