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/she…
==============================================================================
--- 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(a)debitel.de>
+ * clipboard helper functions
+ *
+ * Copyright 2000 Juergen Schmied <juergen.schmied(a)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)