From af810e862f694c588e753aafab09840705402796 Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Wed, 7 Dec 2016 00:10:43 +0000 Subject: [PATCH] [SHELL32] - Initialize the shell icon cache only when needed or when FileIconInit is called (and not in the DllMain of shell32) svn path=/trunk/; revision=73436 --- reactos/dll/win32/shell32/iconcache.cpp | 23 ++++++++++++++++++----- reactos/dll/win32/shell32/shell32.cpp | 1 - reactos/dll/win32/shell32/wine/shellord.c | 4 ++-- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/shell32/iconcache.cpp b/reactos/dll/win32/shell32/iconcache.cpp index 2934304c3d328..9190500138739 100644 --- a/reactos/dll/win32/shell32/iconcache.cpp +++ b/reactos/dll/win32/shell32/iconcache.cpp @@ -453,6 +453,9 @@ INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags ) sice.dwSourceIndex = dwSourceIndex; sice.dwFlags = dwFlags; + if (!sic_hdpa) + SIC_Initialize(); + EnterCriticalSection(&SHELL32_SicCS); if (NULL != DPA_GetPtr (sic_hdpa, 0)) @@ -687,6 +690,9 @@ static int SIC_LoadOverlayIcon(int icon_idx) RegCloseKey(hKeyShellIcons); } + if (!sic_hdpa) + SIC_Initialize(); + return SIC_LoadIcon(iconPath, iconIdx, 0); } @@ -698,13 +704,17 @@ static int SIC_LoadOverlayIcon(int icon_idx) * */ BOOL WINAPI Shell_GetImageLists(HIMAGELIST * lpBigList, HIMAGELIST * lpSmallList) -{ TRACE("(%p,%p)\n",lpBigList,lpSmallList); +{ + TRACE("(%p,%p)\n",lpBigList,lpSmallList); + + if (!sic_hdpa) + SIC_Initialize(); + if (lpBigList) - { *lpBigList = ShellBigIconList; - } + *lpBigList = ShellBigIconList; + if (lpSmallList) - { *lpSmallList = ShellSmallIconList; - } + *lpSmallList = ShellSmallIconList; return TRUE; } @@ -735,6 +745,9 @@ BOOL PidlToSicIndex ( TRACE("sf=%p pidl=%p %s\n", sh, pidl, bBigIcon?"Big":"Small"); + if (!sic_hdpa) + SIC_Initialize(); + if (SUCCEEDED (sh->GetUIObjectOf(0, 1, &pidl, IID_NULL_PPV_ARG(IExtractIconW, &ei)))) { if (SUCCEEDED(ei->GetIconLocation(uFlags, szIconFile, MAX_PATH, &iSourceIndex, &dwFlags))) diff --git a/reactos/dll/win32/shell32/shell32.cpp b/reactos/dll/win32/shell32/shell32.cpp index 0b1e444dc754d..2ef621af55f39 100644 --- a/reactos/dll/win32/shell32/shell32.cpp +++ b/reactos/dll/win32/shell32/shell32.cpp @@ -308,7 +308,6 @@ STDAPI_(BOOL) DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID fImpLoad) InitCommonControlsEx(&InitCtrls); /* Bad idea, initialization in DllMain! */ - SIC_Initialize(); InitChangeNotifications(); } else if (dwReason == DLL_PROCESS_DETACH) diff --git a/reactos/dll/win32/shell32/wine/shellord.c b/reactos/dll/win32/shell32/wine/shellord.c index 90814c1a78379..df2c5205a99b3 100644 --- a/reactos/dll/win32/shell32/wine/shellord.c +++ b/reactos/dll/win32/shell32/wine/shellord.c @@ -1292,8 +1292,8 @@ BOOL WINAPI WriteCabinetState(CABINETSTATE *cs) * */ BOOL WINAPI FileIconInit(BOOL bFullInit) -{ FIXME("(%s)\n", bFullInit ? "true" : "false"); - return FALSE; +{ + return SIC_Initialize(); } /*************************************************************************