[SHELL32]

* Another partial sync of clipboard.c with Wine 1.7.27.
* Move RenderPREFEREDDROPEFFECT to CIDLDataObj.cpp where it belongs.
CORE-8540

svn path=/branches/shell-experiments/; revision=65294
This commit is contained in:
Amine Khaldi 2014-11-06 18:33:33 +00:00
parent 98ab989c82
commit 9f5ca3848b
3 changed files with 66 additions and 53 deletions

View file

@ -225,6 +225,21 @@ HRESULT WINAPI CIDLDataObj::Initialize(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LP
return S_OK; return S_OK;
} }
static HGLOBAL RenderPREFEREDDROPEFFECT (DWORD dwFlags)
{
DWORD * pdwFlag;
HGLOBAL hGlobal;
TRACE("(0x%08x)\n", dwFlags);
hGlobal = GlobalAlloc(GHND|GMEM_SHARE, sizeof(DWORD));
if(!hGlobal) return hGlobal;
pdwFlag = (DWORD*)GlobalLock(hGlobal);
*pdwFlag = dwFlags;
GlobalUnlock(hGlobal);
return hGlobal;
}
/************************************************************************** /**************************************************************************
* IDataObject_fnGetData * IDataObject_fnGetData
*/ */

View file

@ -54,56 +54,91 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
{ {
UINT i; UINT i;
#ifdef __REACTOS__
int size = 0; int size = 0;
#else
int rootlen = 0,size = 0;
WCHAR wszRootPath[MAX_PATH];
#endif
WCHAR wszFileName[MAX_PATH]; WCHAR wszFileName[MAX_PATH];
HGLOBAL hGlobal = NULL; HGLOBAL hGlobal = NULL;
DROPFILES *pDropFiles; DROPFILES *pDropFiles;
int offset; int offset;
#ifdef __REACTOS__
LPITEMIDLIST *pidls; LPITEMIDLIST *pidls;
#endif
TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl); TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl);
#ifdef __REACTOS__
pidls = (LPITEMIDLIST *)HeapAlloc(GetProcessHeap(), 0, cidl * sizeof(*pidls)); pidls = (LPITEMIDLIST *)HeapAlloc(GetProcessHeap(), 0, cidl * sizeof(*pidls));
if (!pidls) if (!pidls)
goto cleanup; goto cleanup;
#endif
/* get the size needed */ /* get the size needed */
size = sizeof(DROPFILES); size = sizeof(DROPFILES);
#ifndef __REACTOS__
SHGetPathFromIDListW(pidlRoot, wszRootPath);
PathAddBackslashW(wszRootPath);
rootlen = strlenW(wszRootPath);
#endif
for (i=0; i<cidl;i++) for (i=0; i<cidl;i++)
{ {
#ifdef __REACTOS__
pidls[i] = ILCombine(pidlRoot, apidl[i]); pidls[i] = ILCombine(pidlRoot, apidl[i]);
SHGetPathFromIDListW(pidls[i], wszFileName); SHGetPathFromIDListW(pidls[i], wszFileName);
size += (wcslen(wszFileName) + 1) * sizeof(WCHAR); size += (wcslen(wszFileName) + 1) * sizeof(WCHAR);
#else
_ILSimpleGetTextW(apidl[i], wszFileName, MAX_PATH);
size += (rootlen + strlenW(wszFileName) + 1) * sizeof(WCHAR);
#endif
} }
size += sizeof(WCHAR); size += sizeof(WCHAR);
/* Fill the structure */ /* Fill the structure */
hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size); hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size);
if(!hGlobal) #ifdef __REACTOS__
goto cleanup; if(!hGlobal) goto cleanup;
#else
if(!hGlobal) return hGlobal;
#endif
pDropFiles = (DROPFILES *)GlobalLock(hGlobal); pDropFiles = GlobalLock(hGlobal);
offset = (sizeof(DROPFILES) + sizeof(WCHAR) - 1) / sizeof(WCHAR); offset = (sizeof(DROPFILES) + sizeof(WCHAR) - 1) / sizeof(WCHAR);
pDropFiles->pFiles = offset * sizeof(WCHAR); pDropFiles->pFiles = offset * sizeof(WCHAR);
pDropFiles->fWide = TRUE; pDropFiles->fWide = TRUE;
#ifndef __REACTOS__
strcpyW(wszFileName, wszRootPath);
#endif
for (i=0; i<cidl;i++) for (i=0; i<cidl;i++)
{ {
#ifdef __REACTOS__
SHGetPathFromIDListW(pidls[i], wszFileName); SHGetPathFromIDListW(pidls[i], wszFileName);
wcscpy(((WCHAR*)pDropFiles)+offset, wszFileName); wcscpy(((WCHAR*)pDropFiles)+offset, wszFileName);
offset += wcslen(wszFileName) + 1; offset += wcslen(wszFileName) + 1;
ILFree(pidls[i]); ILFree(pidls[i]);
#else
_ILSimpleGetTextW(apidl[i], wszFileName + rootlen, MAX_PATH - rootlen);
strcpyW(((WCHAR*)pDropFiles)+offset, wszFileName);
offset += strlenW(wszFileName) + 1;
#endif
} }
((WCHAR*)pDropFiles)[offset] = 0; ((WCHAR*)pDropFiles)[offset] = 0;
GlobalUnlock(hGlobal); GlobalUnlock(hGlobal);
#ifdef __REACTOS__
cleanup: cleanup:
if(pidls) if(pidls)
HeapFree(GetProcessHeap(), 0, pidls); HeapFree(GetProcessHeap(), 0, pidls);
#endif
return hGlobal; return hGlobal;
} }
@ -150,24 +185,6 @@ HGLOBAL RenderSHELLIDLIST (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cid
return hGlobal; return hGlobal;
} }
HGLOBAL RenderSHELLIDLISTOFFSET (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
{
FIXME("\n");
return 0;
}
HGLOBAL RenderFILECONTENTS (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
{
FIXME("\n");
return 0;
}
HGLOBAL RenderFILEDESCRIPTOR (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
{
FIXME("\n");
return 0;
}
HGLOBAL RenderFILENAMEA (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) HGLOBAL RenderFILENAMEA (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
{ {
int size = 0; int size = 0;
@ -231,18 +248,3 @@ HGLOBAL RenderFILENAMEW (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
return hGlobal; return hGlobal;
} }
HGLOBAL RenderPREFEREDDROPEFFECT (DWORD dwFlags)
{
DWORD * pdwFlag;
HGLOBAL hGlobal;
TRACE("(0x%08x)\n", dwFlags);
hGlobal = GlobalAlloc(GHND|GMEM_SHARE, sizeof(DWORD));
if(!hGlobal) return hGlobal;
pdwFlag = (DWORD*)GlobalLock(hGlobal);
*pdwFlag = dwFlags;
GlobalUnlock(hGlobal);
return hGlobal;
}

View file

@ -98,12 +98,8 @@ LPEXTRACTICONW IExtractIconW_Constructor(LPCITEMIDLIST);
HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
HGLOBAL RenderSHELLIDLIST (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); HGLOBAL RenderSHELLIDLIST (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
HGLOBAL RenderSHELLIDLISTOFFSET (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
HGLOBAL RenderFILECONTENTS (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
HGLOBAL RenderFILEDESCRIPTOR (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
HGLOBAL RenderFILENAMEA (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); HGLOBAL RenderFILENAMEA (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
HGLOBAL RenderFILENAMEW (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); HGLOBAL RenderFILENAMEW (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
HGLOBAL RenderPREFEREDDROPEFFECT (DWORD dwFlags);
/* Change Notification */ /* Change Notification */
void InitChangeNotifications(void); void InitChangeNotifications(void);