diff --git a/reactos/dll/win32/shell32/droptargets/CFSDropTarget.cpp b/reactos/dll/win32/shell32/droptargets/CFSDropTarget.cpp index 82de0a21916..8a21cc3030d 100644 --- a/reactos/dll/win32/shell32/droptargets/CFSDropTarget.cpp +++ b/reactos/dll/win32/shell32/droptargets/CFSDropTarget.cpp @@ -31,7 +31,7 @@ WINE_DEFAULT_DEBUG_CHANNEL (shell); * PIDLs relative to the given base folder */ WCHAR * -BuildPathsList(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls) +BuildPathsList(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls, BOOL bRelative) { WCHAR *pwszPathsList; WCHAR *pwszListPos; @@ -48,6 +48,10 @@ BuildPathsList(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls) wcscpy(pwszListPos, wszBasePath); pwszListPos += iPathLen; + + if (_ILIsFolder(pidls[i]) && bRelative) + continue; + /* FIXME: abort if path too long */ _ILSimpleGetTextW(pidls[i], pwszListPos, MAX_PATH - iPathLen); pwszListPos += wcslen(pwszListPos) + 1; @@ -95,8 +99,8 @@ HRESULT WINAPI CFSDropTarget::CopyItems(IShellFolder * pSFFrom, UINT cidl, wcscpy(szTargetPath, sPathTarget); pszTarget = PathAddBackslashW(szTargetPath); - pszSrcList = BuildPathsList(szSrcPath, cidl, apidl); - pszTargetList = BuildPathsList(szTargetPath, cidl, apidl); + pszSrcList = BuildPathsList(szSrcPath, cidl, apidl, FALSE); + pszTargetList = BuildPathsList(szTargetPath, cidl, apidl, TRUE); if (!pszSrcList || !pszTargetList) { diff --git a/reactos/dll/win32/shell32/droptargets/CFSDropTarget.h b/reactos/dll/win32/shell32/droptargets/CFSDropTarget.h index 61ed795ceb9..5e582048bda 100644 --- a/reactos/dll/win32/shell32/droptargets/CFSDropTarget.h +++ b/reactos/dll/win32/shell32/droptargets/CFSDropTarget.h @@ -23,7 +23,7 @@ #ifndef _CFSDROPTARGET_H_ #define _CFSDROPTARGET_H_ -WCHAR *BuildPathsList(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls); +WCHAR *BuildPathsList(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls, BOOL bRelative); class CFSDropTarget : public CComObjectRootEx, diff --git a/reactos/dll/win32/shell32/folders/CRecycleBin.cpp b/reactos/dll/win32/shell32/folders/CRecycleBin.cpp index ba4d3c0ec50..480d3ce02c7 100644 --- a/reactos/dll/win32/shell32/folders/CRecycleBin.cpp +++ b/reactos/dll/win32/shell32/folders/CRecycleBin.cpp @@ -1162,7 +1162,7 @@ HRESULT WINAPI DoDeleteDataObject(IDataObject *pda, DWORD fMask) *pwszFilename = L'\0'; /* Build paths list */ - LPWSTR pwszPaths = BuildPathsList(wszPath, lpcida->cidl, (LPCITEMIDLIST*) apidl); + LPWSTR pwszPaths = BuildPathsList(wszPath, lpcida->cidl, (LPCITEMIDLIST*) apidl, FALSE); if (!pwszPaths) { SHFree(pidl);