Index: win32/shell32/droptargets/CFSDropTarget.cpp =================================================================== --- win32/shell32/droptargets/CFSDropTarget.cpp (revision 74004) +++ win32/shell32/droptargets/CFSDropTarget.cpp (working copy) @@ -31,7 +31,7 @@ * PIDLs relative to the given base folder */ WCHAR * -BuildPathsList(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls) +BuildPathsList(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls, BOOL bTarget) { WCHAR *pwszPathsList; WCHAR *pwszListPos; @@ -48,6 +48,10 @@ wcscpy(pwszListPos, wszBasePath); pwszListPos += iPathLen; + + if (_ILIsFolder(pidls[i]) && bTarget) + continue; + /* FIXME: abort if path too long */ _ILSimpleGetTextW(pidls[i], pwszListPos, MAX_PATH - iPathLen); pwszListPos += wcslen(pwszListPos) + 1; @@ -95,8 +99,8 @@ 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) { Index: win32/shell32/droptargets/CFSDropTarget.h =================================================================== --- win32/shell32/droptargets/CFSDropTarget.h (revision 74004) +++ win32/shell32/droptargets/CFSDropTarget.h (working copy) @@ -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 bTarget); class CFSDropTarget : public CComObjectRootEx, Index: win32/shell32/folders/CRecycleBin.cpp =================================================================== --- win32/shell32/folders/CRecycleBin.cpp (revision 74004) +++ win32/shell32/folders/CRecycleBin.cpp (working copy) @@ -1162,7 +1162,7 @@ *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);