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_…
==============================================================================
--- 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;
++ }
++ }
+ }
+ }
+