Module: wine Branch: master Commit: 7ea711964ba9619c24425f384c8e11ef33a599f5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7ea711964ba9619c24425f384c...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Tue Apr 27 00:38:48 2010 +0400
shell32/shlview: Try to use IShellDetails to respond on notifications if IShellFolder2 isn't available.
---
dlls/shell32/shlview.c | 51 +++++++++++++++++++++++++++++++++-------------- 1 files changed, 36 insertions(+), 15 deletions(-)
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c index b3d300a..d3322e4 100644 --- a/dlls/shell32/shlview.c +++ b/dlls/shell32/shlview.c @@ -1387,28 +1387,49 @@ static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpn
if(lpdi->item.mask & LVIF_TEXT) /* text requested */ { + static WCHAR emptyW[] = { 0 }; + SHELLDETAILS sd; + HRESULT hr; + if (This->pSF2Parent) { - SHELLDETAILS sd; - IShellFolder2_GetDetailsOf(This->pSF2Parent, pidl, lpdi->item.iSubItem, &sd); - if (lpnmh->code == LVN_GETDISPINFOA) - { - /* shouldn't happen */ - NMLVDISPINFOA *lpdiA = (NMLVDISPINFOA *)lpnmh; - StrRetToStrNA( lpdiA->item.pszText, lpdiA->item.cchTextMax, &sd.str, NULL); - TRACE("-- text=%s\n",lpdiA->item.pszText); - } - else /* LVN_GETDISPINFOW */ - { - StrRetToStrNW( lpdi->item.pszText, lpdi->item.cchTextMax, &sd.str, NULL); - TRACE("-- text=%s\n",debugstr_w(lpdi->item.pszText)); - } + hr = IShellFolder2_GetDetailsOf(This->pSF2Parent, pidl, lpdi->item.iSubItem, &sd); } else { - FIXME("no SF2\n"); + IShellDetails *details; + + hr = IShellFolder_QueryInterface(This->pSFParent, &IID_IShellDetails, (void**)&details); + if (hr == S_OK) + { + hr = IShellDetails_GetDetailsOf(details, pidl, lpdi->item.iSubItem, &sd); + IShellDetails_Release(details); + } + else + WARN("IShellFolder2/IShellDetails not supported\n"); + } + + if (hr != S_OK) + { + /* set to empty on failure */ + sd.str.uType = STRRET_WSTR; + sd.str.u.pOleStr = emptyW; } + + if (lpnmh->code == LVN_GETDISPINFOW) + { + StrRetToStrNW( lpdi->item.pszText, lpdi->item.cchTextMax, &sd.str, NULL); + TRACE("-- text=%s\n", debugstr_w(lpdi->item.pszText)); + } + else + { + /* LVN_GETDISPINFOA - shouldn't happen */ + NMLVDISPINFOA *lpdiA = (NMLVDISPINFOA *)lpnmh; + StrRetToStrNA( lpdiA->item.pszText, lpdiA->item.cchTextMax, &sd.str, NULL); + TRACE("-- text=%s\n", lpdiA->item.pszText); + } } + if(lpdi->item.mask & LVIF_IMAGE) /* image requested */ { lpdi->item.iImage = SHMapPIDLToSystemImageListIndex(This->pSFParent, pidl, 0);