Module: wine Branch: master Commit: 6eeb389d15274f2a62293ecdb587138ebe1b415b URL: http://source.winehq.org/git/wine.git/?a=commit;h=6eeb389d15274f2a62293ecdb5...
Author: Huw Davies huw@codeweavers.com Date: Mon Apr 24 08:59:42 2017 +0100
explorer: Don't alter the shell imagelist.
Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
programs/explorer/explorer.c | 50 ++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 25 deletions(-)
diff --git a/programs/explorer/explorer.c b/programs/explorer/explorer.c index 8bfb826..43466dc 100644 --- a/programs/explorer/explorer.c +++ b/programs/explorer/explorer.c @@ -105,42 +105,43 @@ static ULONG WINAPI IExplorerBrowserEventsImpl_fnRelease(IExplorerBrowserEvents return ref; }
-static BOOL create_combobox_item(IShellFolder *folder, LPCITEMIDLIST pidl, IImageList *icon_list, COMBOBOXEXITEMW *item) +static BOOL create_combobox_item(IShellFolder *folder, LPCITEMIDLIST child_pidl, IImageList *icon_list, COMBOBOXEXITEMW *item) { STRRET strret; HRESULT hres; - IExtractIconW *extract_icon; - UINT reserved; - WCHAR icon_file[MAX_PATH]; - INT icon_index; - UINT icon_flags; - HICON icon; + PIDLIST_ABSOLUTE parent_pidl, pidl; + SHFILEINFOW info; + IImageList *list; + strret.uType=STRRET_WSTR; - hres = IShellFolder_GetDisplayNameOf(folder,pidl,SHGDN_FORADDRESSBAR,&strret); + hres = IShellFolder_GetDisplayNameOf( folder, child_pidl, SHGDN_FORADDRESSBAR, &strret ); if(SUCCEEDED(hres)) - hres = StrRetToStrW(&strret, pidl, &item->pszText); + hres = StrRetToStrW(&strret, child_pidl, &item->pszText); if(FAILED(hres)) { WINE_WARN("Could not get name for pidl\n"); return FALSE; } - hres = IShellFolder_GetUIObjectOf(folder,NULL,1,&pidl,&IID_IExtractIconW, - &reserved,(void**)&extract_icon); - if(SUCCEEDED(hres)) - { - item->mask |= CBEIF_IMAGE; - IExtractIconW_GetIconLocation(extract_icon,GIL_FORSHELL,icon_file, - sizeof(icon_file)/sizeof(WCHAR), - &icon_index,&icon_flags); - IExtractIconW_Extract(extract_icon,icon_file,icon_index,NULL,&icon,20); - item->iImage = ImageList_AddIcon((HIMAGELIST)icon_list,icon); - IExtractIconW_Release(extract_icon); - } - else + + item->mask &= ~CBEIF_IMAGE; + hres = SHGetIDListFromObject( (IUnknown *)folder, &parent_pidl ); + if (FAILED(hres)) return FALSE; + + pidl = ILCombine( parent_pidl, child_pidl ); + if (pidl) { - item->mask &= ~CBEIF_IMAGE; - WINE_WARN("Could not get an icon for %s\n",wine_dbgstr_w(item->pszText)); + list = (IImageList *)SHGetFileInfoW( (WCHAR *)pidl, 0, &info, sizeof(info), + SHGFI_PIDL | SHGFI_SMALLICON | SHGFI_SYSICONINDEX ); + if (list) + { + IImageList_Release( list ); + item->iImage = info.iIcon; + item->mask |= CBEIF_IMAGE; + } + ILFree( pidl ); } + ILFree( parent_pidl ); + return TRUE; }
@@ -153,7 +154,6 @@ static void update_path_box(explorer_info *info) LPITEMIDLIST desktop_pidl; IEnumIDList *ids;
- ImageList_Remove((HIMAGELIST)info->icon_list,-1); SendMessageW(info->path_box,CB_RESETCONTENT,0,0); SHGetDesktopFolder(&desktop); IShellFolder_QueryInterface(desktop,&IID_IPersistFolder2,(void**)&persist);