Author: cwittich Date: Fri Jul 27 01:53:05 2007 New Revision: 27889
URL: http://svn.reactos.org/svn/reactos?rev=27889&view=rev Log: add shell32_ros.diff
Added: trunk/reactos/dll/win32/shell32/shell32_ros.diff
Added: trunk/reactos/dll/win32/shell32/shell32_ros.diff URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shell32_r... ============================================================================== --- trunk/reactos/dll/win32/shell32/shell32_ros.diff (added) +++ trunk/reactos/dll/win32/shell32/shell32_ros.diff Fri Jul 27 01:53:05 2007 @@ -1,0 +1,77 @@ +Index: shell32_main.c +=================================================================== +--- shell32_main.c (revision 26448) ++++ shell32_main.c (working copy) +@@ -509,23 +509,59 @@ + /* get the iconlocation */ + if (SUCCEEDED(hr) && (flags & SHGFI_ICONLOCATION )) + { +- UINT uDummy,uFlags; ++ if (!(flags & SHGFI_USEFILEATTRIBUTES)) ++ { ++ UINT uDummy,uFlags; + +- hr = IShellFolder_GetUIObjectOf(psfParent, 0, 1, +- (LPCITEMIDLIST*)&pidlLast, &IID_IExtractIconA, +- &uDummy, (LPVOID*)&pei); +- if (SUCCEEDED(hr)) ++ hr = IShellFolder_GetUIObjectOf(psfParent, 0, 1, ++ (LPCITEMIDLIST*)&pidlLast, &IID_IExtractIconA, ++ &uDummy, (LPVOID*)&pei); ++ if (SUCCEEDED(hr)) ++ { ++ hr = IExtractIconW_GetIconLocation(pei, uGilFlags, ++ szLocation, MAX_PATH, &iIndex, &uFlags); ++ psfi->iIcon = iIndex; ++ ++ if (!(uFlags & GIL_NOTFILENAME)) ++ lstrcpyW (psfi->szDisplayName, szLocation); ++ else ++ ret = FALSE; ++ ++ IExtractIconA_Release(pei); ++ } ++ } ++ else + { +- hr = IExtractIconW_GetIconLocation(pei, uGilFlags, +- szLocation, MAX_PATH, &iIndex, &uFlags); +- psfi->iIcon = iIndex; +- +- if (!(uFlags & GIL_NOTFILENAME)) +- lstrcpyW (psfi->szDisplayName, szLocation); ++ if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ++ { ++ strcpyW(psfi->szDisplayName, swShell32Name); ++ psfi->iIcon = SIC_GetIconIndex(swShell32Name, -IDI_SHELL_FOLDER, 0); ++ } + else +- ret = FALSE; ++ { ++ WCHAR sTemp [MAX_PATH]; ++ WCHAR * szExt; ++ DWORD dwNr=0; ++ static const WCHAR p1W[] = {'%','1',0}; + +- IExtractIconA_Release(pei); ++ lstrcpynW(sTemp, szFullPath, MAX_PATH); ++ ++ psfi->iIcon = 0; ++ szExt = (LPWSTR) PathFindExtensionW(sTemp); ++ if ( szExt && ++ HCR_MapTypeToValueW(szExt, sTemp, MAX_PATH, TRUE) && ++ HCR_GetDefaultIconW(sTemp, sTemp, MAX_PATH, &dwNr)) ++ { ++ if (!lstrcmpW(p1W,sTemp)) /* icon is in the file */ ++ strcpyW(psfi->szDisplayName, szFullPath); ++ else ++ strcpyW(psfi->szDisplayName, sTemp); ++ ++ psfi->iIcon = SIC_GetIconIndex(psfi->szDisplayName, dwNr, 0); ++ if (psfi->iIcon == -1) ++ psfi->iIcon = 0; ++ } ++ } + } + } +