[PATCH] shell32: Implement SHBindToFolderIDListParent.
Dmitry Timoshkov
dmitry at baikal.ru
Thu Jun 9 06:47:34 CDT 2022
Based on SHBindToParent and SHBindToObject implementations.
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
dlls/shell32/pidl.c | 56 +++++++++++++++++++++++++++++++++++++++
dlls/shell32/shell32.spec | 1 +
2 files changed, 57 insertions(+)
diff --git a/dlls/shell32/pidl.c b/dlls/shell32/pidl.c
index f9c91a79132..f004b2ff1b6 100644
--- a/dlls/shell32/pidl.c
+++ b/dlls/shell32/pidl.c
@@ -1364,6 +1364,62 @@ HRESULT WINAPI SHBindToObject(IShellFolder *psf, LPCITEMIDLIST pidl, IBindCtx *p
}
+HRESULT WINAPI SHBindToFolderIDListParent(IShellFolder *psf, LPCITEMIDLIST pidl,
+ REFIID riid, void **ppv, LPCITEMIDLIST *ppidlLast)
+{
+ IShellFolder *psfDesktop = NULL;
+ LPITEMIDLIST pidlChild;
+ LPITEMIDLIST pidlParent;
+ HRESULT hr;
+
+ TRACE_(shell)("%p,%p,%s,%p,%p\n", psf, pidl, debugstr_guid(riid), ppv, ppidlLast);
+ pdump(pidl);
+
+ if (!ppv)
+ return E_INVALIDARG;
+
+ *ppv = NULL;
+
+ if (!psf)
+ {
+ hr = SHGetDesktopFolder(&psfDesktop);
+ if (FAILED(hr))
+ return hr;
+ psf = psfDesktop;
+ }
+
+ if (ppidlLast)
+ *ppidlLast = NULL;
+
+ if (_ILIsPidlSimple(pidl))
+ {
+ /* we are on desktop level */
+ if (ppidlLast)
+ *ppidlLast = ILClone(pidl);
+ hr = SHGetDesktopFolder((IShellFolder **)ppv);
+ }
+ else
+ {
+ pidlChild = ILClone(ILFindLastID(pidl));
+ pidlParent = ILClone(pidl);
+ ILRemoveLastID(pidlParent);
+
+ hr = IShellFolder_BindToObject(psf, pidlParent, NULL, riid, ppv);
+ if (SUCCEEDED(hr) && ppidlLast)
+ *ppidlLast = pidlChild;
+ else
+ ILFree(pidlChild);
+ ILFree(pidlParent);
+ }
+
+ if (psfDesktop)
+ IShellFolder_Release(psfDesktop);
+
+ TRACE_(shell)("-- ppv=%p ret=0x%08lx\n", *ppv, hr);
+ return hr;
+}
+
+
/*************************************************************************
* SHParseDisplayName [SHELL32.@]
*/
diff --git a/dlls/shell32/shell32.spec b/dlls/shell32/shell32.spec
index f8bf8f246e8..5b812774e1f 100644
--- a/dlls/shell32/shell32.spec
+++ b/dlls/shell32/shell32.spec
@@ -334,6 +334,7 @@
@ stdcall SHAssocEnumHandlers(wstr long ptr)
@ stdcall SHBindToObject(ptr ptr ptr ptr ptr)
@ stdcall SHBindToParent(ptr ptr ptr ptr)
+@ stdcall SHBindToFolderIDListParent(ptr ptr ptr ptr ptr)
@ stdcall SHBrowseForFolder(ptr) SHBrowseForFolderA
@ stdcall SHBrowseForFolderA(ptr)
@ stdcall SHBrowseForFolderW(ptr)
--
2.36.1
More information about the wine-devel
mailing list