Author: spetreolle Date: Tue Mar 15 15:37:09 2011 New Revision: 51053
URL: http://svn.reactos.org/svn/reactos?rev=51053&view=rev Log: [SHELL32] Fix missing "Open" menu entry on right click for All Users desktop shortcuts. Patch by Thomas Faber <thfabba at gmx dot de>
See issue #5998 for more details.
Modified: trunk/reactos/dll/win32/shell32/clipboard.c
Modified: trunk/reactos/dll/win32/shell32/clipboard.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/clipboard... ============================================================================== --- trunk/reactos/dll/win32/shell32/clipboard.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/shell32/clipboard.c [iso-8859-1] Tue Mar 15 15:37:09 2011 @@ -47,26 +47,26 @@ HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl) { UINT i; - int rootlen = 0,size = 0; - WCHAR wszRootPath[MAX_PATH]; + int size = 0; WCHAR wszFileName[MAX_PATH]; HGLOBAL hGlobal; DROPFILES *pDropFiles; int offset; - - TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl); + LPITEMIDLIST *pidls; + + TRACE("(%p,%p,%u)\n", pidlRoot, apidl, cidl); + + pidls = HeapAlloc(GetProcessHeap(), 0, cidl * sizeof *pidls); + if (!pidls) return NULL;
/* get the size needed */ size = sizeof(DROPFILES);
- SHGetPathFromIDListW(pidlRoot, wszRootPath); - PathAddBackslashW(wszRootPath); - rootlen = wcslen(wszRootPath); - for (i=0; i<cidl;i++) { - _ILSimpleGetTextW(apidl[i], wszFileName, MAX_PATH); - size += (rootlen + wcslen(wszFileName) + 1) * sizeof(WCHAR); + pidls[i] = ILCombine(pidlRoot, apidl[i]); + SHGetPathFromIDListW(pidls[i], wszFileName); + size += (wcslen(wszFileName) + 1) * sizeof(WCHAR); }
size += sizeof(WCHAR); @@ -80,18 +80,18 @@ pDropFiles->pFiles = offset * sizeof(WCHAR); pDropFiles->fWide = TRUE;
- wcscpy(wszFileName, wszRootPath); - for (i=0; i<cidl;i++) { - - _ILSimpleGetTextW(apidl[i], wszFileName + rootlen, MAX_PATH - rootlen); + SHGetPathFromIDListW(pidls[i], wszFileName); wcscpy(((WCHAR*)pDropFiles)+offset, wszFileName); offset += wcslen(wszFileName) + 1; + ILFree(pidls[i]); }
((WCHAR*)pDropFiles)[offset] = 0; GlobalUnlock(hGlobal); + + HeapFree(GetProcessHeap(), 0, pidls);
return hGlobal; }