[SHELL32]
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Sat, 14 May 2011 12:57:52 +0000 (12:57 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Sat, 14 May 2011 12:57:52 +0000 (12:57 +0000)
Owen Rudge <orudge at codeweavers dot com>:
Implement SHGetImageList
http://source.winehq.org/git/wine.git/commitdiff/9db87f13d3f0f9e07accc9b5e12dccd202b88156
Fixes explorer++ main window
patch provided by igorko

svn path=/trunk/; revision=51729

reactos/dll/win32/shell32/shellord.c

index 2559cb6..b1f5aed 100644 (file)
@@ -47,6 +47,7 @@
 #include "shlwapi.h"
 #include "commdlg.h"
 #include "recyclebin.h"
+#include "commoncontrols.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(shell);
 WINE_DECLARE_DEBUG_CHANNEL(pidl);
@@ -2247,10 +2248,40 @@ void WINAPI SHFlushSFCache(void)
 {
 }
 
+/*************************************************************************
+ *              SHGetImageList (SHELL32.727)
+ *
+ * Returns a copy of a shell image list.
+ *
+ * NOTES
+ *   Windows XP features 4 sizes of image list, and Vista 5. Wine currently
+ *   only supports the traditional small and large image lists, so requests
+ *   for the others will currently fail.
+ */
 HRESULT WINAPI SHGetImageList(int iImageList, REFIID riid, void **ppv)
 {
-    FIXME("STUB: %i %s\n",iImageList,debugstr_guid(riid));
-    return E_NOINTERFACE;
+    HIMAGELIST hLarge, hSmall;
+    HIMAGELIST hNew;
+    HRESULT ret = E_FAIL;
+
+    /* Wine currently only maintains large and small image lists */
+    if ((iImageList != SHIL_LARGE) && (iImageList != SHIL_SMALL) && (iImageList != SHIL_SYSSMALL))
+    {
+        FIXME("Unsupported image list %i requested\n", iImageList);
+        return E_FAIL;
+    }
+
+    Shell_GetImageLists(&hLarge, &hSmall);
+    hNew = ImageList_Duplicate(iImageList == SHIL_LARGE ? hLarge : hSmall);
+
+    /* Get the interface for the new image list */
+    if (hNew)
+    {
+        ret = HIMAGELIST_QueryInterface(hNew, riid, ppv);
+        ImageList_Destroy(hNew);
+    }
+
+    return ret;
 }
 
 /*************************************************************************