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_c... ============================================================================== --- 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;
}