Jacek Caban : mshtml: Added IViewObject::SetAdvise implementation.

Alexandre Julliard julliard at winehq.org
Mon Feb 15 10:06:18 CST 2010


Module: wine
Branch: master
Commit: a84741182ff36f01e3972fd8b075b008f4e2af5a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a84741182ff36f01e3972fd8b075b008f4e2af5a

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Feb 15 16:03:25 2010 +0100

mshtml: Added IViewObject::SetAdvise implementation.

---

 dlls/mshtml/htmldoc.c        |    2 ++
 dlls/mshtml/mshtml_private.h |    1 +
 dlls/mshtml/mutation.c       |    2 ++
 dlls/mshtml/nsevents.c       |    3 +++
 dlls/mshtml/view.c           |   15 +++++++++++++--
 5 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index f99ab29..935ec00 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -1992,6 +1992,8 @@ static ULONG WINAPI CustomDoc_Release(ICustomDoc *iface)
         if(This->basedoc.advise_holder)
             IOleAdviseHolder_Release(This->basedoc.advise_holder);
 
+        if(This->view_sink)
+            IAdviseSink_Release(This->view_sink);
         if(This->client)
             IOleObject_SetClientSite(OLEOBJ(&This->basedoc), NULL);
         if(This->in_place_active)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 2fafdf0..c65bffa 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -380,6 +380,7 @@ struct HTMLDocumentObj {
     IOleInPlaceSite *ipsite;
     IOleInPlaceFrame *frame;
     IOleInPlaceUIWindow *ip_window;
+    IAdviseSink *view_sink;
 
     DOCHOSTUIINFO hostinfo;
 
diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c
index 0adf87e..61ceca8 100644
--- a/dlls/mshtml/mutation.c
+++ b/dlls/mshtml/mutation.c
@@ -322,6 +322,8 @@ static void parse_complete_proc(task_t *task)
         init_editor(&doc->basedoc);
 
     call_explorer_69(doc);
+    if(doc->view_sink)
+        IAdviseSink_OnViewChange(doc->view_sink, DVASPECT_CONTENT, -1);
     call_property_onchanged(&doc->basedoc.cp_propnotif, 1005);
     call_explorer_69(doc);
 
diff --git a/dlls/mshtml/nsevents.c b/dlls/mshtml/nsevents.c
index 2dd8248..65bcae0 100644
--- a/dlls/mshtml/nsevents.c
+++ b/dlls/mshtml/nsevents.c
@@ -236,6 +236,9 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event
     set_ready_state(doc->basedoc.window, READYSTATE_COMPLETE);
 
     if(doc == doc_obj->basedoc.doc_node) {
+        if(doc_obj->view_sink)
+            IAdviseSink_OnViewChange(doc_obj->view_sink, DVASPECT_CONTENT, -1);
+
         if(doc_obj->frame) {
             static const WCHAR wszDone[] = {'D','o','n','e',0};
             IOleInPlaceFrame_SetStatusText(doc_obj->frame, wszDone);
diff --git a/dlls/mshtml/view.c b/dlls/mshtml/view.c
index f4c62a0..261e959 100644
--- a/dlls/mshtml/view.c
+++ b/dlls/mshtml/view.c
@@ -807,8 +807,19 @@ static HRESULT WINAPI ViewObject_Unfreeze(IViewObjectEx *iface, DWORD dwFreeze)
 static HRESULT WINAPI ViewObject_SetAdvise(IViewObjectEx *iface, DWORD aspects, DWORD advf, IAdviseSink *pAdvSink)
 {
     HTMLDocument *This = VIEWOBJ_THIS(iface);
-    FIXME("(%p)->(%d %d %p)\n", This, aspects, advf, pAdvSink);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%d %d %p)\n", This, aspects, advf, pAdvSink);
+
+    if(aspects != DVASPECT_CONTENT || advf != ADVF_PRIMEFIRST)
+        FIXME("unsuported arguments\n");
+
+    if(This->doc_obj->view_sink)
+        IAdviseSink_Release(This->doc_obj->view_sink);
+    if(pAdvSink)
+        IAdviseSink_AddRef(pAdvSink);
+
+    This->doc_obj->view_sink = pAdvSink;
+    return S_OK;
 }
 
 static HRESULT WINAPI ViewObject_GetAdvise(IViewObjectEx *iface, DWORD *pAspects, DWORD *pAdvf, IAdviseSink **ppAdvSink)




More information about the wine-cvs mailing list