Module: wine Branch: oldstable Commit: 3d11a967a590c2e9bc36d6183e931541edbd11b9 URL: https://source.winehq.org/git/wine.git/?a=commit;h=3d11a967a590c2e9bc36d6183...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Wed Jul 29 16:57:16 2020 +0800
ieframe: Implement IOleObject::Advise().
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit 0b941ea871482924c1e356b70fe3975fb984fd44) Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
dlls/ieframe/ieframe.h | 2 ++ dlls/ieframe/oleobject.c | 23 ++++++++++++++++++++--- dlls/ieframe/webbrowser.c | 3 +++ 3 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/dlls/ieframe/ieframe.h b/dlls/ieframe/ieframe.h index 8d238863be2..329cea2f7ca 100644 --- a/dlls/ieframe/ieframe.h +++ b/dlls/ieframe/ieframe.h @@ -199,6 +199,8 @@ struct WebBrowser { DWORD sink_aspects; DWORD sink_flags;
+ IOleAdviseHolder *advise_holder; + /* window context */
HWND frame_hwnd; diff --git a/dlls/ieframe/oleobject.c b/dlls/ieframe/oleobject.c index 5c49845aa7e..133e757eef7 100644 --- a/dlls/ieframe/oleobject.c +++ b/dlls/ieframe/oleobject.c @@ -757,11 +757,28 @@ static HRESULT WINAPI OleObject_GetExtent(IOleObject *iface, DWORD dwDrawAspect, }
static HRESULT WINAPI OleObject_Advise(IOleObject *iface, IAdviseSink *pAdvSink, - DWORD* pdwConnection) + DWORD *pdwConnection) { WebBrowser *This = impl_from_IOleObject(iface); - FIXME("(%p)->(%p, %p)\n", This, pAdvSink, pdwConnection); - return E_NOTIMPL; + HRESULT hr = S_OK; + + TRACE("(%p)->(%p, %p)\n", This, pAdvSink, pdwConnection); + + if(!pdwConnection) + return E_INVALIDARG; + + *pdwConnection = 0; + + if(!pAdvSink) + return E_INVALIDARG; + + if(!This->advise_holder) + hr = CreateOleAdviseHolder(&This->advise_holder); + + if(hr == S_OK) + hr = IOleAdviseHolder_Advise(This->advise_holder, pAdvSink, pdwConnection); + + return hr; }
static HRESULT WINAPI OleObject_Unadvise(IOleObject *iface, DWORD dwConnection) diff --git a/dlls/ieframe/webbrowser.c b/dlls/ieframe/webbrowser.c index 1e50512e427..07d5889798a 100644 --- a/dlls/ieframe/webbrowser.c +++ b/dlls/ieframe/webbrowser.c @@ -170,6 +170,9 @@ static ULONG WINAPI WebBrowser_Release(IUnknown *iface) if(This->sink) IAdviseSink_Release(This->sink);
+ if(This->advise_holder) + IOleAdviseHolder_Release(This->advise_holder); + if(This->doc_host.document) IUnknown_Release(This->doc_host.document);