From 59965f9c80f1c112a59e48b307e88e328ca411b5 Mon Sep 17 00:00:00 2001 From: David Hedberg Date: Wed, 25 Aug 2010 15:24:34 +0200 Subject: [PATCH] shell32: Add ICommDlgBrowser3 stub to the ExplorerBrowser control. --- dlls/shell32/ebrowser.c | 128 ++++++++++++++++++++++++++++++++++ dlls/shell32/tests/ebrowser.c | 6 +- 2 files changed, 131 insertions(+), 3 deletions(-) diff --git a/dlls/shell32/ebrowser.c b/dlls/shell32/ebrowser.c index e753a796582..d53d08e1669 100644 --- a/dlls/shell32/ebrowser.c +++ b/dlls/shell32/ebrowser.c @@ -51,6 +51,7 @@ typedef struct _travellog_entry { typedef struct _ExplorerBrowserImpl { const IExplorerBrowserVtbl *lpVtbl; const IShellBrowserVtbl *lpsbVtbl; + const ICommDlgBrowser3Vtbl *lpcdb3Vtbl; LONG ref; BOOL destroyed; @@ -382,6 +383,12 @@ static HRESULT WINAPI IExplorerBrowser_fnQueryInterface(IExplorerBrowser *iface, { *ppvObject = &This->lpsbVtbl; } + else if(IsEqualIID(riid, &IID_ICommDlgBrowser) || + IsEqualIID(riid, &IID_ICommDlgBrowser2) || + IsEqualIID(riid, &IID_ICommDlgBrowser3)) + { + *ppvObject = &This->lpcdb3Vtbl; + } if(*ppvObject) { @@ -1039,6 +1046,126 @@ static const IShellBrowserVtbl vt_IShellBrowser = { IShellBrowser_fnSetToolbarItems }; +/************************************************************************** + * ICommDlgBrowser3 Implementation + */ + +static inline ExplorerBrowserImpl *impl_from_ICommDlgBrowser3(ICommDlgBrowser3 *iface) +{ + return (ExplorerBrowserImpl *)((char*)iface - FIELD_OFFSET(ExplorerBrowserImpl, lpcdb3Vtbl)); +} + +static HRESULT WINAPI ICommDlgBrowser3_fnQueryInterface(ICommDlgBrowser3 *iface, + REFIID riid, + void **ppvObject) +{ + ExplorerBrowserImpl *This = impl_from_ICommDlgBrowser3(iface); + TRACE("%p\n", This); + return IUnknown_QueryInterface((IUnknown*) This, riid, ppvObject); +} + +static ULONG WINAPI ICommDlgBrowser3_fnAddRef(ICommDlgBrowser3 *iface) +{ + ExplorerBrowserImpl *This = impl_from_ICommDlgBrowser3(iface); + TRACE("%p\n", This); + return IUnknown_AddRef((IUnknown*) This); +} + +static ULONG WINAPI ICommDlgBrowser3_fnRelease(ICommDlgBrowser3 *iface) +{ + ExplorerBrowserImpl *This = impl_from_ICommDlgBrowser3(iface); + TRACE("%p\n", This); + return IUnknown_Release((IUnknown*) This); +} + +static HRESULT WINAPI ICommDlgBrowser3_fnOnDefaultCommand(ICommDlgBrowser3 *iface, + IShellView *shv) +{ + ExplorerBrowserImpl *This = impl_from_ICommDlgBrowser3(iface); + FIXME("stub, %p (%p)\n", This, shv); + return E_NOTIMPL; +} +static HRESULT WINAPI ICommDlgBrowser3_fnOnStateChange(ICommDlgBrowser3 *iface, + IShellView *shv, ULONG uChange) +{ + ExplorerBrowserImpl *This = impl_from_ICommDlgBrowser3(iface); + FIXME("stub, %p (%p, %d)\n", This, shv, uChange); + return E_NOTIMPL; +} +static HRESULT WINAPI ICommDlgBrowser3_fnIncludeObject(ICommDlgBrowser3 *iface, + IShellView *pshv, LPCITEMIDLIST pidl) +{ + ExplorerBrowserImpl *This = impl_from_ICommDlgBrowser3(iface); + FIXME("stub, %p (%p, %p)\n", This, pshv, pidl); + return S_OK; +} + +static HRESULT WINAPI ICommDlgBrowser3_fnNotify(ICommDlgBrowser3 *iface, + IShellView *pshv, + DWORD dwNotifyType) +{ + ExplorerBrowserImpl *This = impl_from_ICommDlgBrowser3(iface); + FIXME("stub, %p (%p, 0x%x)\n", This, pshv, dwNotifyType); + return S_OK; +} + +static HRESULT WINAPI ICommDlgBrowser3_fnGetDefaultMenuText(ICommDlgBrowser3 *iface, + IShellView *pshv, + LPWSTR pszText, int cchMax) +{ + ExplorerBrowserImpl *This = impl_from_ICommDlgBrowser3(iface); + FIXME("stub, %p (%p, %s, %d)\n", This, pshv, debugstr_w(pszText), cchMax); + return S_OK; +} + +static HRESULT WINAPI ICommDlgBrowser3_fnGetViewFlags(ICommDlgBrowser3 *iface, + DWORD *pdwFlags) +{ + ExplorerBrowserImpl *This = impl_from_ICommDlgBrowser3(iface); + FIXME("stub, %p (%p)\n", This, pdwFlags); + return S_OK; +} + +static HRESULT WINAPI ICommDlgBrowser3_fnOnColumnClicked(ICommDlgBrowser3 *iface, + IShellView *pshv, int iColumn) +{ + ExplorerBrowserImpl *This = impl_from_ICommDlgBrowser3(iface); + FIXME("stub, %p (%p, %d)\n", This, pshv, iColumn); + return S_OK; +} + +static HRESULT WINAPI ICommDlgBrowser3_fnGetCurrentFilter(ICommDlgBrowser3 *iface, + LPWSTR pszFileSpec, + int cchFileSpec) +{ + ExplorerBrowserImpl *This = impl_from_ICommDlgBrowser3(iface); + FIXME("stub, %p (%s, %d)\n", This, debugstr_w(pszFileSpec), cchFileSpec); + return S_OK; +} + +static HRESULT WINAPI ICommDlgBrowser3_fnOnPreviewCreated(ICommDlgBrowser3 *iface, + IShellView *pshv) +{ + ExplorerBrowserImpl *This = impl_from_ICommDlgBrowser3(iface); + FIXME("stub, %p (%p)\n", This, pshv); + return S_OK; +} + +static const ICommDlgBrowser3Vtbl vt_ICommDlgBrowser3 = { + ICommDlgBrowser3_fnQueryInterface, + ICommDlgBrowser3_fnAddRef, + ICommDlgBrowser3_fnRelease, + ICommDlgBrowser3_fnOnDefaultCommand, + ICommDlgBrowser3_fnOnStateChange, + ICommDlgBrowser3_fnIncludeObject, + ICommDlgBrowser3_fnNotify, + ICommDlgBrowser3_fnGetDefaultMenuText, + ICommDlgBrowser3_fnGetViewFlags, + ICommDlgBrowser3_fnOnColumnClicked, + ICommDlgBrowser3_fnGetCurrentFilter, + ICommDlgBrowser3_fnOnPreviewCreated +}; + HRESULT WINAPI ExplorerBrowser_Constructor(IUnknown *pUnkOuter, REFIID riid, void **ppv) { ExplorerBrowserImpl *eb; @@ -1055,6 +1182,7 @@ HRESULT WINAPI ExplorerBrowser_Constructor(IUnknown *pUnkOuter, REFIID riid, voi eb->ref = 1; eb->lpVtbl = &vt_IExplorerBrowser; eb->lpsbVtbl = &vt_IShellBrowser; + eb->lpcdb3Vtbl = &vt_ICommDlgBrowser3; list_init(&eb->event_clients); list_init(&eb->travellog); diff --git a/dlls/shell32/tests/ebrowser.c b/dlls/shell32/tests/ebrowser.c index 809a7fc97ed..1dd866d0442 100644 --- a/dlls/shell32/tests/ebrowser.c +++ b/dlls/shell32/tests/ebrowser.c @@ -167,9 +167,9 @@ static void test_QueryInterface(void) test_qinterface(IID_IExplorerBrowser, S_OK); test_qinterface(IID_IShellBrowser, S_OK); todo_wine test_qinterface(IID_IOleWindow, S_OK); - todo_wine test_qinterface(IID_ICommDlgBrowser, S_OK); - todo_wine test_qinterface(IID_ICommDlgBrowser2, S_OK); - todo_wine test_qinterface(IID_ICommDlgBrowser3, S_OK); + test_qinterface(IID_ICommDlgBrowser, S_OK); + test_qinterface(IID_ICommDlgBrowser2, S_OK); + test_qinterface(IID_ICommDlgBrowser3, S_OK); todo_wine test_qinterface(IID_IServiceProvider, S_OK); todo_wine test_qinterface(IID_IObjectWithSite, S_OK); todo_wine test_qinterface(IID_IConnectionPointContainer, S_OK);