Fix for OpenIcon.
This commit is contained in:
parent
2ff02949c6
commit
d52e04781b
|
@ -191,7 +191,7 @@ static HRESULT WINAPI IExtractIconA_fnGetIconLocation(
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lstrcpynA(szIconFile, "shell32.dll", cchMax);
|
lstrcpynA(szIconFile, "shell32.dll", cchMax);
|
||||||
*piIndex = 3;
|
*piIndex = (uFlags & GIL_OPENICON)? 4 : 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else /* object is file */
|
else /* object is file */
|
||||||
|
|
|
@ -614,6 +614,7 @@ BOOL SIC_Initialize(void)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
InitializeCriticalSection(&SHELL32_SicCS);
|
InitializeCriticalSection(&SHELL32_SicCS);
|
||||||
|
MakeCriticalSectionGlobal(&SHELL32_SicCS);
|
||||||
|
|
||||||
sic_hdpa = pDPA_Create(16);
|
sic_hdpa = pDPA_Create(16);
|
||||||
|
|
||||||
|
@ -672,6 +673,7 @@ void SIC_Destroy(void)
|
||||||
sic_hdpa = NULL;
|
sic_hdpa = NULL;
|
||||||
|
|
||||||
LeaveCriticalSection(&SHELL32_SicCS);
|
LeaveCriticalSection(&SHELL32_SicCS);
|
||||||
|
DeleteCriticalSection(&SHELL32_SicCS);
|
||||||
}
|
}
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* Shell_GetImageList [SHELL32.71]
|
* Shell_GetImageList [SHELL32.71]
|
||||||
|
@ -698,23 +700,30 @@ BOOL WINAPI Shell_GetImageList(HIMAGELIST * lpBigList, HIMAGELIST * lpSmallList)
|
||||||
* sh [IN] IShellFolder
|
* sh [IN] IShellFolder
|
||||||
* pidl [IN]
|
* pidl [IN]
|
||||||
* bBigIcon [IN]
|
* bBigIcon [IN]
|
||||||
|
* uFlags [IN] GIL_*
|
||||||
* pIndex [OUT] index within the SIC
|
* pIndex [OUT] index within the SIC
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
BOOL PidlToSicIndex (IShellFolder * sh, LPITEMIDLIST pidl, BOOL bBigIcon, UINT * pIndex)
|
BOOL PidlToSicIndex (
|
||||||
|
IShellFolder * sh,
|
||||||
|
LPITEMIDLIST pidl,
|
||||||
|
BOOL bBigIcon,
|
||||||
|
UINT uFlags,
|
||||||
|
UINT * pIndex)
|
||||||
{
|
{
|
||||||
IExtractIcon *ei;
|
IExtractIconA *ei;
|
||||||
char szIconFile[MAX_PATH]; /* file containing the icon */
|
char szIconFile[MAX_PATH]; /* file containing the icon */
|
||||||
INT iSourceIndex; /* index or resID(negated) in this file */
|
INT iSourceIndex; /* index or resID(negated) in this file */
|
||||||
BOOL ret = FALSE;
|
BOOL ret = FALSE;
|
||||||
UINT dwFlags = 0;
|
UINT dwFlags = 0;
|
||||||
|
|
||||||
TRACE("sf=%p pidl=%p\n", sh, pidl);
|
TRACE("sf=%p pidl=%p %s\n", sh, pidl, bBigIcon?"Big":"Small");
|
||||||
|
|
||||||
if (SUCCEEDED (IShellFolder_GetUIObjectOf(sh, 0, 1, &pidl, &IID_IExtractIconA, 0, (void **)&ei)))
|
if (SUCCEEDED (IShellFolder_GetUIObjectOf(sh, 0, 1, &pidl, &IID_IExtractIconA, 0, (void **)&ei)))
|
||||||
{
|
{
|
||||||
if (NOERROR==IExtractIconA_GetIconLocation(ei, 0, szIconFile, MAX_PATH, &iSourceIndex, &dwFlags))
|
if (SUCCEEDED(IExtractIconA_GetIconLocation(ei, uFlags, szIconFile, MAX_PATH, &iSourceIndex, &dwFlags)))
|
||||||
{ *pIndex = SIC_GetIconIndex(szIconFile, iSourceIndex);
|
{
|
||||||
|
*pIndex = SIC_GetIconIndex(szIconFile, iSourceIndex);
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
}
|
}
|
||||||
IExtractIconA_Release(ei);
|
IExtractIconA_Release(ei);
|
||||||
|
@ -744,8 +753,8 @@ UINT WINAPI SHMapPIDLToSystemImageListIndex(LPSHELLFOLDER sh, LPITEMIDLIST pidl,
|
||||||
pdump(pidl);
|
pdump(pidl);
|
||||||
|
|
||||||
if (pIndex)
|
if (pIndex)
|
||||||
PidlToSicIndex ( sh, pidl, 1, pIndex);
|
PidlToSicIndex ( sh, pidl, 1, 0, pIndex);
|
||||||
PidlToSicIndex ( sh, pidl, 0, &Index);
|
PidlToSicIndex ( sh, pidl, 0, 0, &Index);
|
||||||
return Index;
|
return Index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue