[PATCH 2/3] shell32: Implement SHBindToFolderIDListParent.
Mohamad Al-Jaf
mohamadaljaf at gmail.com
Tue May 3 21:14:44 CDT 2022
Called by IE11.
Signed-off-by: Mohamad Al-Jaf <mohamadaljaf at gmail.com>
---
dlls/shell32/pidl.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 42 insertions(+), 2 deletions(-)
diff --git a/dlls/shell32/pidl.c b/dlls/shell32/pidl.c
index a87a8762a26..86dc43d3177 100644
--- a/dlls/shell32/pidl.c
+++ b/dlls/shell32/pidl.c
@@ -1290,8 +1290,48 @@ BOOL WINAPI SHGetPathFromIDListEx(LPCITEMIDLIST pidl, WCHAR *path, DWORD path_si
*/
HRESULT WINAPI SHBindToFolderIDListParent(IShellFolder *psf, LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
{
- FIXME("(%p, %p, %s, %p, %p) - semi-stub\n", psf, pidl, debugstr_guid(riid), ppv, ppidlLast);
- return SHBindToParent(pidl, riid, ppv, ppidlLast);
+ IShellFolder *psfDesktop = NULL;
+ HRESULT hr;
+
+ TRACE_(shell)("%p,%p,%s\n", psf, pidl, debugstr_guid(riid));
+ pdump(pidl);
+
+ if (!pidl || !ppv)
+ return E_INVALIDARG;
+
+ *ppv = NULL;
+ if (ppidlLast)
+ *ppidlLast = NULL;
+
+ if (!psf)
+ {
+ hr = SHGetDesktopFolder(&psfDesktop);
+ if (FAILED(hr))
+ return hr;
+ psf = psfDesktop;
+ }
+
+ if (_ILIsPidlSimple(pidl))
+ {
+ /* we are on desktop level */
+ hr = IShellFolder_QueryInterface(psf, riid, ppv);
+ }
+ else
+ {
+ LPITEMIDLIST pidlParent = ILClone(pidl);
+ ILRemoveLastID(pidlParent);
+ hr = IShellFolder_BindToObject(psf, pidlParent, NULL, riid, ppv);
+ SHFree (pidlParent);
+ }
+
+ if (psfDesktop)
+ IShellFolder_Release(psfDesktop);
+
+ if (SUCCEEDED(hr) && ppidlLast)
+ *ppidlLast = ILFindLastID(pidl);
+
+ TRACE_(shell)("-- ppv=%p pidl=%p ret=0x%08lx\n", *ppv, (ppidlLast)?*ppidlLast:NULL, hr);
+ return hr;
}
/*************************************************************************
--
2.36.0
More information about the wine-devel
mailing list