shell32: Support BHID_SFUIObject and BHID_DataObject in IShellItem::BindToHandler.
This commit is contained in:
parent
b88c3e2ecb
commit
1f73f3a591
|
@ -190,6 +190,26 @@ static HRESULT WINAPI ShellItem_BindToHandler(IShellItem *iface, IBindCtx *pbc,
|
||||||
}
|
}
|
||||||
return ret;
|
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));
|
FIXME("Unsupported BHID %s.\n", debugstr_guid(rbhid));
|
||||||
|
|
||||||
|
|
|
@ -1888,7 +1888,7 @@ static void test_SHCreateShellItem(void)
|
||||||
{
|
{
|
||||||
IShellItem *shellitem, *shellitem2;
|
IShellItem *shellitem, *shellitem2;
|
||||||
IPersistIDList *persistidl;
|
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;
|
HRESULT ret;
|
||||||
char curdirA[MAX_PATH];
|
char curdirA[MAX_PATH];
|
||||||
WCHAR curdirW[MAX_PATH];
|
WCHAR curdirW[MAX_PATH];
|
||||||
|
@ -1910,6 +1910,17 @@ static void test_SHCreateShellItem(void)
|
||||||
return;
|
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);
|
MultiByteToWideChar(CP_ACP, 0, curdirA, -1, curdirW, MAX_PATH);
|
||||||
|
|
||||||
ret = SHGetDesktopFolder(&desktopfolder);
|
ret = SHGetDesktopFolder(&desktopfolder);
|
||||||
|
@ -2058,6 +2069,17 @@ static void test_SHCreateShellItem(void)
|
||||||
}
|
}
|
||||||
IPersistIDList_Release(persistidl);
|
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);
|
IShellItem_Release(shellitem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2161,6 +2183,7 @@ static void test_SHCreateShellItem(void)
|
||||||
DeleteFileA(".\\testfile");
|
DeleteFileA(".\\testfile");
|
||||||
pILFree(pidl_abstestfile);
|
pILFree(pidl_abstestfile);
|
||||||
pILFree(pidl_testfile);
|
pILFree(pidl_testfile);
|
||||||
|
pILFree(pidl_desktop);
|
||||||
pILFree(pidl_cwd);
|
pILFree(pidl_cwd);
|
||||||
IShellFolder_Release(currentfolder);
|
IShellFolder_Release(currentfolder);
|
||||||
IShellFolder_Release(desktopfolder);
|
IShellFolder_Release(desktopfolder);
|
||||||
|
@ -3270,16 +3293,21 @@ static void test_ShellItemBindToHandler(void)
|
||||||
IPersistFolder2_Release(ppf2);
|
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
|
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 */
|
/* BHID_SFViewObject */
|
||||||
hr = IShellItem_BindToHandler(psi, NULL, &BHID_SFViewObject, &IID_IShellView, (void**)&punk);
|
hr = IShellItem_BindToHandler(psi, NULL, &BHID_SFViewObject, &IID_IShellView, (void**)&punk);
|
||||||
ok(hr == S_OK, "Got 0x%08x\n", hr);
|
ok(hr == S_OK, "Got 0x%08x\n", hr);
|
||||||
|
@ -3319,11 +3347,6 @@ static void test_ShellItemBindToHandler(void)
|
||||||
ok(hr == S_OK || broken(hr == MK_E_NOOBJECT /* XP */), "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);
|
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 */
|
/* BHID_Filter */
|
||||||
hr = IShellItem_BindToHandler(psi, NULL, &BHID_Filter, &IID_IUnknown, (void**)&punk);
|
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);
|
ok(hr == S_OK || broken(hr == MK_E_NOOBJECT /* XP */), "Got 0x%08x\n", hr);
|
||||||
|
|
Loading…
Reference in New Issue