mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 01:15:09 +00:00
- 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:
parent
782931f369
commit
0c5b1ec2bc
1 changed files with 23 additions and 6 deletions
|
@ -1054,9 +1054,19 @@ DoPaste(
|
|||
return E_FAIL;
|
||||
}
|
||||
|
||||
IShellFolder_Release(psfDesktop);
|
||||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue