mirror of
https://github.com/reactos/reactos.git
synced 2025-06-13 04:38:29 +00:00
[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:
parent
98ab989c82
commit
9f5ca3848b
3 changed files with 66 additions and 53 deletions
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue