- Create IDataObject from the selected pidl

- Check if drop target is the desktop
- fixes bug 3763

svn path=/trunk/; revision=37363
This commit is contained in:
Johannes Anderwald 2008-11-14 19:48:46 +00:00
parent 782931f369
commit 0c5b1ec2bc

View file

@ -1054,9 +1054,19 @@ DoPaste(
return E_FAIL;
}
if (This->dcm.cidl)
{
IShellFolder_Release(psfDesktop);
hr = IShellFolder_BindToObject(This->dcm.psf, This->dcm.apidl[0], NULL, &IID_IShellFolder, (LPVOID*)&psfTarget);
}
else
{
/* target folder is desktop because cidl is zero */
psfTarget = psfDesktop;
hr = S_OK;
}
if (FAILED(IShellFolder_BindToObject(This->dcm.psf, This->dcm.apidl[0], NULL, &IID_IShellFolder, (LPVOID*)&psfTarget)))
if (FAILED(hr))
{
ERR("no IShellFolder\n");
@ -1309,9 +1319,16 @@ DoCopyOrCut(
{
LPSHELLBROWSER lpSB;
LPSHELLVIEW lpSV;
LPDATAOBJECT lpDo;
LPDATAOBJECT pDataObj;
HRESULT hr;
if (SUCCEEDED(SHCreateDataObject(iface->dcm.pidlFolder, iface->dcm.cidl, iface->dcm.apidl, NULL, &IID_IDataObject, (void**)&pDataObj)))
{
hr = OleSetClipboard(pDataObj);
IDataObject_Release(pDataObj);
return hr;
}
lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER,0,0);
if (!lpSB)
{
@ -1326,19 +1343,19 @@ DoCopyOrCut(
return hr;
}
hr = IShellView_GetItemObject(lpSV, SVGIO_SELECTION, &IID_IDataObject, (LPVOID*)&lpDo);
hr = IShellView_GetItemObject(lpSV, SVGIO_SELECTION, &IID_IDataObject, (LPVOID*)&pDataObj);
if (FAILED(hr))
{
TRACE("failed to get item object\n");
return hr;
}
hr = OleSetClipboard(lpDo);
hr = OleSetClipboard(pDataObj);
if (FAILED(hr))
{
WARN("OleSetClipboard failed");
}
IDataObject_Release(lpDo);
IDataObject_Release(pDataObj);
IShellView_Release(lpSV);
return S_OK;
}