* 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;
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;
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)
{
#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<CComMultiThreadModelNoCS>,
*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);