mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 13:26:17 +00:00
[SHELL32]
- Add support for deleting multiple files from the context menu - Fix error debug print See issue #4383 for more details. svn path=/trunk/; revision=46900
This commit is contained in:
parent
76e18f2271
commit
a40f637b41
1 changed files with 14 additions and 7 deletions
|
@ -48,7 +48,7 @@ static LPIDefaultContextMenuImpl __inline impl_from_IContextMenu( IContextMenu2
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID INewItem_SetCurrentShellFolder(IShellFolder * psfParent); // HACK
|
VOID INewItem_SetCurrentShellFolder(IShellFolder * psfParent); // HACK
|
||||||
|
WCHAR *build_paths_list(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls);
|
||||||
|
|
||||||
static
|
static
|
||||||
HRESULT
|
HRESULT
|
||||||
|
@ -1297,12 +1297,12 @@ DoDelete(
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
STRRET strTemp;
|
STRRET strTemp;
|
||||||
WCHAR szPath[MAX_PATH];
|
WCHAR szPath[MAX_PATH];
|
||||||
|
LPWSTR wszPath, wszPos;
|
||||||
SHFILEOPSTRUCTW op;
|
SHFILEOPSTRUCTW op;
|
||||||
int ret;
|
int ret;
|
||||||
LPSHELLBROWSER lpSB;
|
LPSHELLBROWSER lpSB;
|
||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
|
|
||||||
|
|
||||||
hr = IShellFolder2_GetDisplayNameOf(This->dcm.psf, This->dcm.apidl[0], SHGDN_FORPARSING, &strTemp);
|
hr = IShellFolder2_GetDisplayNameOf(This->dcm.psf, This->dcm.apidl[0], SHGDN_FORPARSING, &strTemp);
|
||||||
if(hr != S_OK)
|
if(hr != S_OK)
|
||||||
{
|
{
|
||||||
|
@ -1316,20 +1316,26 @@ DoDelete(
|
||||||
ERR("StrRetToBufW failed with %x\n", hr);
|
ERR("StrRetToBufW failed with %x\n", hr);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
/* FIXME
|
|
||||||
* implement deletion with multiple files
|
/* Only keep the base path */
|
||||||
*/
|
wszPos = strrchrW(szPath, '\\');
|
||||||
|
if (wszPos != NULL)
|
||||||
|
{
|
||||||
|
*(wszPos + 1) = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
wszPath = build_paths_list(szPath, This->dcm.cidl, This->dcm.apidl);
|
||||||
|
|
||||||
ZeroMemory(&op, sizeof(op));
|
ZeroMemory(&op, sizeof(op));
|
||||||
op.hwnd = GetActiveWindow();
|
op.hwnd = GetActiveWindow();
|
||||||
op.wFunc = FO_DELETE;
|
op.wFunc = FO_DELETE;
|
||||||
op.pFrom = szPath;
|
op.pFrom = wszPath;
|
||||||
op.fFlags = FOF_ALLOWUNDO;
|
op.fFlags = FOF_ALLOWUNDO;
|
||||||
ret = SHFileOperationW(&op);
|
ret = SHFileOperationW(&op);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
TRACE("SHFileOperation failed with %0x%x", GetLastError());
|
ERR("SHFileOperation failed with 0x%x for %s\n", GetLastError(), debugstr_w(wszPath));
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1348,6 +1354,7 @@ DoDelete(
|
||||||
}
|
}
|
||||||
NotifyShellViewWindow(lpcmi, TRUE);
|
NotifyShellViewWindow(lpcmi, TRUE);
|
||||||
|
|
||||||
|
HeapFree(GetProcessHeap(), 0, wszPath);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue