Module: wine Branch: master Commit: f118c64d6241edf5c5ee2e442973e2fd23bc29ac URL: http://source.winehq.org/git/wine.git/?a=commit;h=f118c64d6241edf5c5ee2e4429...
Author: David Hedberg david.hedberg@gmail.com Date: Wed Aug 25 15:24:35 2010 +0200
shell32: Implement CommDlgBrowser::OnDefaultCommand in the ExplorerBrowser control.
---
dlls/shell32/ebrowser.c | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/dlls/shell32/ebrowser.c b/dlls/shell32/ebrowser.c index d53d08e..3ba15b9 100644 --- a/dlls/shell32/ebrowser.c +++ b/dlls/shell32/ebrowser.c @@ -1082,8 +1082,46 @@ static HRESULT WINAPI ICommDlgBrowser3_fnOnDefaultCommand(ICommDlgBrowser3 *ifac IShellView *shv) { ExplorerBrowserImpl *This = impl_from_ICommDlgBrowser3(iface); - FIXME("stub, %p (%p)\n", This, shv); - return E_NOTIMPL; + IDataObject *pdo; + HRESULT hr; + HRESULT ret = S_FALSE; + + TRACE("%p (%p)\n", This, shv); + + hr = IShellView_GetItemObject(shv, SVGIO_SELECTION, &IID_IDataObject, (void**)&pdo); + if(SUCCEEDED(hr)) + { + FORMATETC fmt; + STGMEDIUM medium; + + fmt.cfFormat = RegisterClipboardFormatW(CFSTR_SHELLIDLISTW); + fmt.ptd = NULL; + fmt.dwAspect = DVASPECT_CONTENT; + fmt.lindex = -1; + fmt.tymed = TYMED_HGLOBAL; + + hr = IDataObject_GetData(pdo, &fmt ,&medium); + IDataObject_Release(pdo); + if(SUCCEEDED(hr)) + { + LPIDA pida = GlobalLock(medium.u.hGlobal); + LPCITEMIDLIST pidl_child = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[1]); + + /* Handle folders by browsing to them. */ + if(_ILIsFolder(pidl_child) || _ILIsDrive(pidl_child) || _ILIsSpecialFolder(pidl_child)) + { + IExplorerBrowser_BrowseToIDList((IExplorerBrowser*)This, pidl_child, SBSP_RELATIVE); + ret = S_OK; + } + GlobalUnlock(medium.u.hGlobal); + GlobalFree(medium.u.hGlobal); + } + else + ERR("Failed to get data from IDataObject.\n"); + } else + ERR("Failed to get IDataObject.\n"); + + return ret; } static HRESULT WINAPI ICommDlgBrowser3_fnOnStateChange(ICommDlgBrowser3 *iface, IShellView *shv, ULONG uChange)