From: Amine Khaldi Date: Mon, 3 Nov 2014 13:43:01 +0000 (+0000) Subject: [SHELL32] X-Git-Tag: backups/shell-experiments@75904~60 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=e24032eb8cc38a15f3d3210a3108e8f9334c9026 [SHELL32] * Apply Wine commit e330a128 by Alexandre Julliard: Use Shell_GetImageLists to retrieve image lists instead of using a global variable. CORE-8540 svn path=/branches/shell-experiments/; revision=65222 --- diff --git a/dll/win32/shell32/folders/printers.cpp b/dll/win32/shell32/folders/printers.cpp index 5ea85577b45..06e935bb6f7 100644 --- a/dll/win32/shell32/folders/printers.cpp +++ b/dll/win32/shell32/folders/printers.cpp @@ -125,17 +125,20 @@ HRESULT WINAPI CPrintersExtractIconW::Extract(LPCWSTR pszFile, HICON *phiconSmall, UINT nIconSize) { int index; + HIMAGELIST big_icons, small_icons; FIXME("(%p) (file=%p index=%d %p %p size=%x) semi-stub\n", this, debugstr_w(pszFile), (signed)nIconIndex, phiconLarge, phiconSmall, nIconSize); index = SIC_GetIconIndex(pszFile, nIconIndex, 0); + Shell_GetImageLists(&big_icons, &small_icons); + if (phiconLarge) - *phiconLarge = ImageList_GetIcon(ShellBigIconList, index, ILD_TRANSPARENT); + *phiconLarge = ImageList_GetIcon(big_icons, index, ILD_TRANSPARENT); if (phiconSmall) - *phiconSmall = ImageList_GetIcon(ShellSmallIconList, index, ILD_TRANSPARENT); + *phiconSmall = ImageList_GetIcon(small_icons, index, ILD_TRANSPARENT); return S_OK; } diff --git a/dll/win32/shell32/iconcache.cpp b/dll/win32/shell32/iconcache.cpp index 2d72dfbcfc3..573dd4b6f8d 100644 --- a/dll/win32/shell32/iconcache.cpp +++ b/dll/win32/shell32/iconcache.cpp @@ -37,6 +37,9 @@ typedef struct static HDPA sic_hdpa = 0; +static HIMAGELIST ShellSmallIconList; +static HIMAGELIST ShellBigIconList; + namespace { extern CRITICAL_SECTION SHELL32_SicCS; diff --git a/dll/win32/shell32/shell32.cpp b/dll/win32/shell32/shell32.cpp index e2220cfed03..016f6b04e6a 100644 --- a/dll/win32/shell32/shell32.cpp +++ b/dll/win32/shell32/shell32.cpp @@ -233,8 +233,6 @@ STDAPI DllGetVersion(DLLVERSIONINFO *pdvi) * */ HINSTANCE shell32_hInstance; -HIMAGELIST ShellSmallIconList = 0; -HIMAGELIST ShellBigIconList = 0; void *operator new (size_t, void *buf) { diff --git a/dll/win32/shell32/shlview.cpp b/dll/win32/shell32/shlview.cpp index 04819f46f01..1d0264be050 100644 --- a/dll/win32/shell32/shlview.cpp +++ b/dll/win32/shell32/shlview.cpp @@ -587,6 +587,7 @@ BOOL CDefView::InitList() { SHELLDETAILS sd; WCHAR szTemp[50]; + HIMAGELIST big_icons, small_icons; TRACE("%p\n", this); @@ -608,8 +609,9 @@ BOOL CDefView::InitList() FIXME("no SF2\n"); } - m_ListView.SetImageList(ShellBigIconList, LVSIL_NORMAL); - m_ListView.SetImageList(ShellSmallIconList, LVSIL_SMALL); + Shell_GetImageLists(&big_icons, &small_icons); + m_ListView.SetImageList(big_icons, LVSIL_NORMAL); + m_ListView.SetImageList(small_icons, LVSIL_SMALL); return TRUE; } diff --git a/dll/win32/shell32/wine/shell32_main.c b/dll/win32/shell32/wine/shell32_main.c index 9ef03eb8d2d..932ec2c56a1 100644 --- a/dll/win32/shell32/wine/shell32_main.c +++ b/dll/win32/shell32/wine/shell32_main.c @@ -419,6 +419,7 @@ DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes, HRESULT hr = S_OK; BOOL IconNotYetLoaded=TRUE; UINT uGilFlags = 0; + HIMAGELIST big_icons, small_icons; TRACE("%s fattr=0x%x sfi=%p(attr=0x%08x) size=0x%x flags=0x%x\n", (flags & SHGFI_PIDL)? "pidl" : debugstr_w(path), dwFileAttributes, @@ -557,6 +558,9 @@ DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes, } /* ### icons ###*/ + + Shell_GetImageLists( &big_icons, &small_icons ); + if (flags & SHGFI_OPENICON) uGilFlags |= GIL_OPENICON; @@ -701,9 +705,9 @@ DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes, if (ret && (flags & SHGFI_SYSICONINDEX)) { if (flags & SHGFI_SMALLICON) - ret = (DWORD_PTR) ShellSmallIconList; + ret = (DWORD_PTR)small_icons; else - ret = (DWORD_PTR) ShellBigIconList; + ret = (DWORD_PTR)big_icons; } } @@ -711,9 +715,9 @@ DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes, if (SUCCEEDED(hr) && (flags & SHGFI_ICON) && IconNotYetLoaded) { if (flags & SHGFI_SMALLICON) - psfi->hIcon = ImageList_GetIcon( ShellSmallIconList, psfi->iIcon, ILD_NORMAL); + psfi->hIcon = ImageList_GetIcon( small_icons, psfi->iIcon, ILD_NORMAL); else - psfi->hIcon = ImageList_GetIcon( ShellBigIconList, psfi->iIcon, ILD_NORMAL); + psfi->hIcon = ImageList_GetIcon( big_icons, psfi->iIcon, ILD_NORMAL); } if (flags & ~SHGFI_KNOWN_FLAGS) diff --git a/dll/win32/shell32/wine/shell32_main.h b/dll/win32/shell32/wine/shell32_main.h index 722d9db5961..9b930e6cc5d 100644 --- a/dll/win32/shell32/wine/shell32_main.h +++ b/dll/win32/shell32/wine/shell32_main.h @@ -31,8 +31,6 @@ extern "C" { */ extern HMODULE huser32; extern HINSTANCE shell32_hInstance; -extern HIMAGELIST ShellSmallIconList; -extern HIMAGELIST ShellBigIconList; BOOL WINAPI Shell_GetImageLists(HIMAGELIST * lpBigList, HIMAGELIST * lpSmallList);