mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-08-28 19:26:16 +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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user