mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +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;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (This->dcm.cidl)
|
||||||
|
{
|
||||||
IShellFolder_Release(psfDesktop);
|
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");
|
ERR("no IShellFolder\n");
|
||||||
|
|
||||||
|
@ -1309,9 +1319,16 @@ DoCopyOrCut(
|
||||||
{
|
{
|
||||||
LPSHELLBROWSER lpSB;
|
LPSHELLBROWSER lpSB;
|
||||||
LPSHELLVIEW lpSV;
|
LPSHELLVIEW lpSV;
|
||||||
LPDATAOBJECT lpDo;
|
LPDATAOBJECT pDataObj;
|
||||||
HRESULT hr;
|
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);
|
lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER,0,0);
|
||||||
if (!lpSB)
|
if (!lpSB)
|
||||||
{
|
{
|
||||||
|
@ -1326,19 +1343,19 @@ DoCopyOrCut(
|
||||||
return hr;
|
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))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
TRACE("failed to get item object\n");
|
TRACE("failed to get item object\n");
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = OleSetClipboard(lpDo);
|
hr = OleSetClipboard(pDataObj);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
WARN("OleSetClipboard failed");
|
WARN("OleSetClipboard failed");
|
||||||
}
|
}
|
||||||
IDataObject_Release(lpDo);
|
IDataObject_Release(pDataObj);
|
||||||
IShellView_Release(lpSV);
|
IShellView_Release(lpSV);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue