}
return ret;
}
+ else if (IsEqualGUID(rbhid, &BHID_SFUIObject))
+ {
+ IShellFolder *psf_parent;
+ if (_ILIsDesktop(This->pidl))
+ ret = SHGetDesktopFolder(&psf_parent);
+ else
+ ret = ShellItem_get_parent_shellfolder(This, &psf_parent);
+
+ if (SUCCEEDED(ret))
+ {
+ LPCITEMIDLIST pidl = ILFindLastID(This->pidl);
+ ret = IShellFolder_GetUIObjectOf(psf_parent, NULL, 1, &pidl, riid, NULL, ppvOut);
+ IShellFolder_Release(psf_parent);
+ }
+ return ret;
+ }
+ else if (IsEqualGUID(rbhid, &BHID_DataObject))
+ {
+ return ShellItem_BindToHandler((IShellItem*)This, pbc, &BHID_SFUIObject, &IID_IDataObject, ppvOut);
+ }
FIXME("Unsupported BHID %s.\n", debugstr_guid(rbhid));
{
IShellItem *shellitem, *shellitem2;
IPersistIDList *persistidl;
- LPITEMIDLIST pidl_cwd=NULL, pidl_testfile, pidl_abstestfile, pidl_test;
+ LPITEMIDLIST pidl_cwd=NULL, pidl_testfile, pidl_abstestfile, pidl_test, pidl_desktop;
HRESULT ret;
char curdirA[MAX_PATH];
WCHAR curdirW[MAX_PATH];
return;
}
+ if(pSHGetSpecialFolderLocation)
+ {
+ ret = pSHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &pidl_desktop);
+ ok(ret == S_OK, "Got 0x%08x\n", ret);
+ }
+ else
+ {
+ win_skip("pSHGetSpecialFolderLocation missing.\n");
+ pidl_desktop = NULL;
+ }
+
MultiByteToWideChar(CP_ACP, 0, curdirA, -1, curdirW, MAX_PATH);
ret = SHGetDesktopFolder(&desktopfolder);
}
IPersistIDList_Release(persistidl);
}
+
+ IShellItem_Release(shellitem);
+ }
+
+ ret = pSHCreateShellItem(NULL, NULL, pidl_desktop, &shellitem);
+ ok(SUCCEEDED(ret), "SHCreateShellItem returned %x\n", ret);
+ if (SUCCEEDED(ret))
+ {
+ ret = IShellItem_GetParent(shellitem, &shellitem2);
+ ok(FAILED(ret), "Got 0x%08x\n", ret);
+ if(SUCCEEDED(ret)) IShellItem_Release(shellitem2);
IShellItem_Release(shellitem);
}
DeleteFileA(".\\testfile");
pILFree(pidl_abstestfile);
pILFree(pidl_testfile);
+ pILFree(pidl_desktop);
pILFree(pidl_cwd);
IShellFolder_Release(currentfolder);
IShellFolder_Release(desktopfolder);
IPersistFolder2_Release(ppf2);
}
+ /* BHID_SFUIObject */
+ hr = IShellItem_BindToHandler(psi, NULL, &BHID_SFUIObject, &IID_IDataObject, (void**)&punk);
+ ok(hr == S_OK || broken(hr == E_NOINTERFACE /* XP */), "Got 0x%08x\n", hr);
+ if(SUCCEEDED(hr)) IUnknown_Release(punk);
+ hr = IShellItem_BindToHandler(psi, NULL, &BHID_SFUIObject, &IID_IContextMenu, (void**)&punk);
+ ok(hr == S_OK || broken(hr == E_NOINTERFACE /* XP */), "Got 0x%08x\n", hr);
+ if(SUCCEEDED(hr)) IUnknown_Release(punk);
+
+ /* BHID_DataObject */
+ hr = IShellItem_BindToHandler(psi, NULL, &BHID_DataObject, &IID_IDataObject, (void**)&punk);
+ ok(hr == S_OK || broken(hr == MK_E_NOOBJECT /* XP */), "Got 0x%08x\n", hr);
+ if(SUCCEEDED(hr)) IUnknown_Release(punk);
+
todo_wine
{
- /* BHID_SFUIObject */
- hr = IShellItem_BindToHandler(psi, NULL, &BHID_SFUIObject, &IID_IDataObject, (void**)&punk);
- ok(hr == S_OK || broken(hr == E_NOINTERFACE /* XP */), "Got 0x%08x\n", hr);
- if(SUCCEEDED(hr)) IUnknown_Release(punk);
- hr = IShellItem_BindToHandler(psi, NULL, &BHID_SFUIObject, &IID_IContextMenu, (void**)&punk);
- ok(hr == S_OK || broken(hr == E_NOINTERFACE /* XP */), "Got 0x%08x\n", hr);
- if(SUCCEEDED(hr)) IUnknown_Release(punk);
-
/* BHID_SFViewObject */
hr = IShellItem_BindToHandler(psi, NULL, &BHID_SFViewObject, &IID_IShellView, (void**)&punk);
ok(hr == S_OK, "Got 0x%08x\n", hr);
ok(hr == S_OK || broken(hr == MK_E_NOOBJECT /* XP */), "Got 0x%08x\n", hr);
if(SUCCEEDED(hr)) IUnknown_Release(punk);
- /* BHID_DataObject */
- hr = IShellItem_BindToHandler(psi, NULL, &BHID_DataObject, &IID_IDataObject, (void**)&punk);
- ok(hr == S_OK || broken(hr == MK_E_NOOBJECT /* XP */), "Got 0x%08x\n", hr);
- if(SUCCEEDED(hr)) IUnknown_Release(punk);
-
/* BHID_Filter */
hr = IShellItem_BindToHandler(psi, NULL, &BHID_Filter, &IID_IUnknown, (void**)&punk);
ok(hr == S_OK || broken(hr == MK_E_NOOBJECT /* XP */), "Got 0x%08x\n", hr);