David Hedberg : shell32: Implement CommDlgBrowser:: OnDefaultCommand in the ExplorerBrowser control.
Alexandre Julliard
julliard at winehq.org
Wed Aug 25 12:35:08 CDT 2010
Module: wine
Branch: master
Commit: f118c64d6241edf5c5ee2e442973e2fd23bc29ac
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f118c64d6241edf5c5ee2e442973e2fd23bc29ac
Author: David Hedberg <david.hedberg at 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)
More information about the wine-cvs
mailing list