[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:
Gregor Schneider 2010-04-16 21:22:06 +00:00
parent 76e18f2271
commit a40f637b41

View file

@ -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;
} }