Author: akhaldi Date: Thu Nov 6 18:10:37 2014 New Revision: 65293
URL: http://svn.reactos.org/svn/reactos?rev=65293&view=rev Log: [SHELL32] * Partial sync of clipboard.c with Wine 1.7.27. CORE-8540
Modified: branches/shell-experiments/dll/win32/shell32/wine/clipboard.c
Modified: branches/shell-experiments/dll/win32/shell32/wine/clipboard.c URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/dll/win32/shel... ============================================================================== --- branches/shell-experiments/dll/win32/shell32/wine/clipboard.c [iso-8859-1] (original) +++ branches/shell-experiments/dll/win32/shell32/wine/clipboard.c [iso-8859-1] Thu Nov 6 18:10:37 2014 @@ -1,7 +1,7 @@ /* - * clipboard helper functions - * - * Copyright 2000 Juergen Schmied juergen.schmied@debitel.de + * clipboard helper functions + * + * Copyright 2000 Juergen Schmied juergen.schmied@debitel.de * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,13 +25,13 @@ * * - a right mousebutton-copy sets the following formats: * classic: - * Shell IDList Array - * Preferred Drop Effect - * Shell Object Offsets - * HDROP - * FileName + * Shell IDList Array + * Preferred Drop Effect + * Shell Object Offsets + * HDROP + * FileName * ole: - * OlePrivateData (ClipboardDataObjectInterface) + * OlePrivateData (ClipboardDataObjectInterface) * */
@@ -42,6 +42,7 @@ #include <winbase.h> #include <shlobj.h> #include <wine/debug.h> +#include <wine/unicode.h>
WINE_DEFAULT_DEBUG_CHANNEL(shell);
@@ -52,100 +53,101 @@ */ HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) { - UINT i; + UINT i; int size = 0; - WCHAR wszFileName[MAX_PATH]; + WCHAR wszFileName[MAX_PATH]; HGLOBAL hGlobal = NULL; - DROPFILES *pDropFiles; - int offset; + DROPFILES *pDropFiles; + int offset; LPITEMIDLIST *pidls;
- TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl); + TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl);
pidls = (LPITEMIDLIST *)HeapAlloc(GetProcessHeap(), 0, cidl * sizeof(*pidls)); if (!pidls) goto cleanup;
- /* get the size needed */ - size = sizeof(DROPFILES); - - for (i=0; i<cidl;i++) - { + /* get the size needed */ + size = sizeof(DROPFILES); + + for (i=0; i<cidl;i++) + { pidls[i] = ILCombine(pidlRoot, apidl[i]); SHGetPathFromIDListW(pidls[i], wszFileName); size += (wcslen(wszFileName) + 1) * sizeof(WCHAR); - } - - size += sizeof(WCHAR); - - /* Fill the structure */ - hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size); + } + + size += sizeof(WCHAR); + + /* Fill the structure */ + hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size); if(!hGlobal) goto cleanup;
pDropFiles = (DROPFILES *)GlobalLock(hGlobal); - offset = (sizeof(DROPFILES) + sizeof(WCHAR) - 1) / sizeof(WCHAR); + offset = (sizeof(DROPFILES) + sizeof(WCHAR) - 1) / sizeof(WCHAR); pDropFiles->pFiles = offset * sizeof(WCHAR); pDropFiles->fWide = TRUE;
- for (i=0; i<cidl;i++) - { + for (i=0; i<cidl;i++) + { + SHGetPathFromIDListW(pidls[i], wszFileName); wcscpy(((WCHAR*)pDropFiles)+offset, wszFileName); offset += wcslen(wszFileName) + 1; ILFree(pidls[i]); - } - - ((WCHAR*)pDropFiles)[offset] = 0; - GlobalUnlock(hGlobal); + } + + ((WCHAR*)pDropFiles)[offset] = 0; + GlobalUnlock(hGlobal);
cleanup: if(pidls) HeapFree(GetProcessHeap(), 0, pidls);
- return hGlobal; + return hGlobal; }
HGLOBAL RenderSHELLIDLIST (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) { - UINT i; - int offset = 0, sizePidl, size; - HGLOBAL hGlobal; - LPIDA pcida; - - TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl); - - /* get the size needed */ - size = sizeof(CIDA) + sizeof (UINT)*(cidl); /* header */ - size += ILGetSize (pidlRoot); /* root pidl */ - for(i=0; i<cidl; i++) - { - size += ILGetSize(apidl[i]); /* child pidls */ - } - - /* fill the structure */ - hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size); - if(!hGlobal) return hGlobal; - pcida = (LPIDA)GlobalLock (hGlobal); - pcida->cidl = cidl; - - /* root pidl */ - offset = sizeof(CIDA) + sizeof (UINT)*(cidl); - pcida->aoffset[0] = offset; /* first element */ - sizePidl = ILGetSize (pidlRoot); - memcpy(((LPBYTE)pcida)+offset, pidlRoot, sizePidl); - offset += sizePidl; - - for(i=0; i<cidl; i++) /* child pidls */ - { - pcida->aoffset[i+1] = offset; - sizePidl = ILGetSize(apidl[i]); - memcpy(((LPBYTE)pcida)+offset, apidl[i], sizePidl); - offset += sizePidl; - } - - GlobalUnlock(hGlobal); - return hGlobal; + UINT i; + int offset = 0, sizePidl, size; + HGLOBAL hGlobal; + LPIDA pcida; + + TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl); + + /* get the size needed */ + size = sizeof(CIDA) + sizeof (UINT)*(cidl); /* header */ + size += ILGetSize (pidlRoot); /* root pidl */ + for(i=0; i<cidl; i++) + { + size += ILGetSize(apidl[i]); /* child pidls */ + } + + /* fill the structure */ + hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size); + if(!hGlobal) return hGlobal; + pcida = GlobalLock (hGlobal); + pcida->cidl = cidl; + + /* root pidl */ + offset = sizeof(CIDA) + sizeof (UINT)*(cidl); + pcida->aoffset[0] = offset; /* first element */ + sizePidl = ILGetSize (pidlRoot); + memcpy(((LPBYTE)pcida)+offset, pidlRoot, sizePidl); + offset += sizePidl; + + for(i=0; i<cidl; i++) /* child pidls */ + { + pcida->aoffset[i+1] = offset; + sizePidl = ILGetSize(apidl[i]); + memcpy(((LPBYTE)pcida)+offset, apidl[i], sizePidl); + offset += sizePidl; + } + + GlobalUnlock(hGlobal); + return hGlobal; }
HGLOBAL RenderSHELLIDLISTOFFSET (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) @@ -168,66 +170,66 @@
HGLOBAL RenderFILENAMEA (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) { - int size = 0; - char szTemp[MAX_PATH], *szFileName; - LPITEMIDLIST pidl; - HGLOBAL hGlobal; - BOOL bSuccess; - - TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl); - - /* get path of combined pidl */ - pidl = ILCombine(pidlRoot, apidl[0]); - if (!pidl) - return 0; - - bSuccess = SHGetPathFromIDListA(pidl, szTemp); - SHFree(pidl); - if (!bSuccess) - return 0; - - size = strlen(szTemp) + 1; - - /* fill the structure */ - hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size); - if(!hGlobal) return hGlobal; - szFileName = (char *)GlobalLock(hGlobal); - memcpy(szFileName, szTemp, size); - GlobalUnlock(hGlobal); - - return hGlobal; + int size = 0; + char szTemp[MAX_PATH], *szFileName; + LPITEMIDLIST pidl; + HGLOBAL hGlobal; + BOOL bSuccess; + + TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl); + + /* get path of combined pidl */ + pidl = ILCombine(pidlRoot, apidl[0]); + if (!pidl) + return 0; + + bSuccess = SHGetPathFromIDListA(pidl, szTemp); + SHFree(pidl); + if (!bSuccess) + return 0; + + size = strlen(szTemp) + 1; + + /* fill the structure */ + hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size); + if(!hGlobal) return hGlobal; + szFileName = GlobalLock(hGlobal); + memcpy(szFileName, szTemp, size); + GlobalUnlock(hGlobal); + + return hGlobal; }
HGLOBAL RenderFILENAMEW (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) { - int size = 0; - WCHAR szTemp[MAX_PATH], *szFileName; - LPITEMIDLIST pidl; - HGLOBAL hGlobal; - BOOL bSuccess; - - TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl); - - /* get path of combined pidl */ - pidl = ILCombine(pidlRoot, apidl[0]); - if (!pidl) - return 0; - - bSuccess = SHGetPathFromIDListW(pidl, szTemp); - SHFree(pidl); - if (!bSuccess) - return 0; - - size = (wcslen(szTemp)+1) * sizeof(WCHAR); - - /* fill the structure */ - hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size); - if(!hGlobal) return hGlobal; - szFileName = (WCHAR *)GlobalLock(hGlobal); - memcpy(szFileName, szTemp, size); - GlobalUnlock(hGlobal); - - return hGlobal; + int size = 0; + WCHAR szTemp[MAX_PATH], *szFileName; + LPITEMIDLIST pidl; + HGLOBAL hGlobal; + BOOL bSuccess; + + TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl); + + /* get path of combined pidl */ + pidl = ILCombine(pidlRoot, apidl[0]); + if (!pidl) + return 0; + + bSuccess = SHGetPathFromIDListW(pidl, szTemp); + SHFree(pidl); + if (!bSuccess) + return 0; + + size = (strlenW(szTemp)+1) * sizeof(WCHAR); + + /* fill the structure */ + hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size); + if(!hGlobal) return hGlobal; + szFileName = GlobalLock(hGlobal); + memcpy(szFileName, szTemp, size); + GlobalUnlock(hGlobal); + + return hGlobal; }
HGLOBAL RenderPREFEREDDROPEFFECT (DWORD dwFlags)