On 8/2/2010 12:07, David Hedberg wrote:
Hi,
On Mon, Aug 2, 2010 at 7:04 AM, Nikolay Sivovnsivov@codeweavers.com wrote:
On 8/2/2010 02:36, David Hedberg wrote:
+static HRESULT ShellItem_get_shellfolder(ShellItem *This, IBindCtx *pbc, IShellFolder **ppsf) +{
- IShellFolder *desktop;
- HRESULT ret;
- ret = SHGetDesktopFolder(&desktop);
- if (SUCCEEDED(ret))
- {
if (_ILIsDesktop(This->pidl))
{
*ppsf = desktop;
IShellFolder_AddRef(*ppsf);
}
else
{
ret = IShellFolder_BindToObject(desktop, This->pidl,
pbc,&IID_IShellFolder, (void**)ppsf);
}
IShellFolder_Release(desktop);
- }
- return ret;
+}
I don't think this explicit check for desktop folder is needed here, as I understand ::BindToObject() it should handle this case internally.
I wrote a quick testcase and tested it with wine, Windows XP and Windows 7. BindToObject() does not seem to handle this case in any of these, instead they all return E_INVALIDARG. Wine appears to accomplish this with the check for "!pidlComplete->mkid.cb" in shlfolder.c:Shell32_BindToChild. So as far as I can tell, the explicit check here seems to be needed..
Ok, this test is present already cause Desktop list is an empty list. So please change this test for mkid.cb magic value to _ILIsEmpty() in BindToObject() and all other occurrences too (InitializeTreeView() for example).