From 348449a4865e022ea198e52acef1ba6cadb99b7e Mon Sep 17 00:00:00 2001 From: Ge van Geldorp Date: Tue, 13 Sep 2005 11:24:52 +0000 Subject: [PATCH] Save a few megabytes of memory by loading the default icon only once into the image lists. --- dlls/shell32/iconcache.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/dlls/shell32/iconcache.c b/dlls/shell32/iconcache.c index fcae9a3f236..bad57d1ba95 100644 --- a/dlls/shell32/iconcache.c +++ b/dlls/shell32/iconcache.c @@ -351,7 +351,17 @@ INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags ) if ( INVALID_INDEX == index ) { - ret = SIC_LoadIcon (sSourceFile, dwSourceIndex, dwFlags); + if (0 == strcmpiW (sSourceFile, swShell32Name) && + -IDI_SHELL_MY_DOCUMENTS <= dwSourceIndex && + dwSourceIndex < IDI_SHELL_MY_DOCUMENTS) + { + /* Return default icon for icons not present in shell32 */ + ret = 0; + } + else + { + ret = SIC_LoadIcon (sSourceFile, dwSourceIndex, dwFlags); + } } else { @@ -404,13 +414,11 @@ BOOL SIC_Initialize(void) hSm = (HICON)LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(index), IMAGE_ICON, cx_small, cy_small, LR_SHARED); hLg = (HICON)LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(index), IMAGE_ICON, cx_large, cy_large, LR_SHARED); - if(!hSm) + if(hSm) { - hSm = LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(1), IMAGE_ICON, cx_small, cy_small, LR_SHARED); - hLg = LoadImageA(shell32_hInstance, MAKEINTRESOURCEA(1), IMAGE_ICON, cx_large, cy_large, LR_SHARED); + SIC_IconAppend (swShell32Name, index - 1, hSm, hLg, 0); + SIC_IconAppend (swShell32Name, -index, hSm, hLg, 0); } - SIC_IconAppend (swShell32Name, index - 1, hSm, hLg, 0); - SIC_IconAppend (swShell32Name, -index, hSm, hLg, 0); } TRACE("hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList);