Author: gschneider
Date: Fri Apr 16 23:22:06 2010
New Revision: 46900
URL:
http://svn.reactos.org/svn/reactos?rev=46900&view=rev
Log:
[SHELL32]
- Add support for deleting multiple files from the context menu
- Fix error debug print
See issue #4383 for more details.
Modified:
trunk/reactos/dll/win32/shell32/shv_def_cmenu.c
Modified: trunk/reactos/dll/win32/shell32/shv_def_cmenu.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shv_def_…
==============================================================================
--- trunk/reactos/dll/win32/shell32/shv_def_cmenu.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/shv_def_cmenu.c [iso-8859-1] Fri Apr 16 23:22:06 2010
@@ -48,7 +48,7 @@
}
VOID INewItem_SetCurrentShellFolder(IShellFolder * psfParent); // HACK
-
+WCHAR *build_paths_list(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls);
static
HRESULT
@@ -1297,12 +1297,12 @@
HRESULT hr;
STRRET strTemp;
WCHAR szPath[MAX_PATH];
+ LPWSTR wszPath, wszPos;
SHFILEOPSTRUCTW op;
int ret;
LPSHELLBROWSER lpSB;
HWND hwnd;
-
hr = IShellFolder2_GetDisplayNameOf(This->dcm.psf, This->dcm.apidl[0],
SHGDN_FORPARSING, &strTemp);
if(hr != S_OK)
{
@@ -1316,20 +1316,26 @@
ERR("StrRetToBufW failed with %x\n", 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));
op.hwnd = GetActiveWindow();
op.wFunc = FO_DELETE;
- op.pFrom = szPath;
+ op.pFrom = wszPath;
op.fFlags = FOF_ALLOWUNDO;
ret = SHFileOperationW(&op);
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;
}
@@ -1348,6 +1354,7 @@
}
NotifyShellViewWindow(lpcmi, TRUE);
+ HeapFree(GetProcessHeap(), 0, wszPath);
return S_OK;
}