Module: wine Branch: master Commit: ccd339994766a01022abd5e2125e78918fc47175 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=ccd339994766a01022abd5e2...
Author: Jacek Caban jacek@codeweavers.com Date: Sun Sep 24 23:39:55 2006 +0200
mshtml: Store BSCallback in HTMDocument.
---
dlls/mshtml/htmldoc.c | 2 ++ dlls/mshtml/mshtml_private.h | 7 ++++++- dlls/mshtml/navigate.c | 22 ++++++++++++++++++++-- dlls/mshtml/nsio.c | 2 +- dlls/mshtml/persist.c | 5 ++++- 5 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 52c2c20..5ba1632 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -152,6 +152,8 @@ static ULONG WINAPI HTMLDocument_Release if(This->ipsite) IOleDocumentView_SetInPlaceSite(DOCVIEW(This), NULL);
+ set_document_bscallback(This, NULL); + if(This->tooltips_hwnd) DestroyWindow(This->tooltips_hwnd); if(This->hwnd) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 6af2a8c..b71277b 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -86,6 +86,8 @@ struct HTMLDocument { IOleInPlaceSite *ipsite; IOleInPlaceFrame *frame;
+ BSCallback *bscallback; + HWND hwnd; HWND tooltips_hwnd;
@@ -176,6 +178,8 @@ struct BSCallback { IMoniker *mon; IBinding *binding;
+ HTMLDocument *doc; + nsProtocolStream *nsstream; };
@@ -314,8 +318,9 @@ void nsAString_Finish(nsAString*); nsIInputStream *create_nsstream(const char*,PRInt32); nsICommandParams *create_nscommand_params(void);
-BSCallback *create_bscallback(HTMLDocument*,IMoniker*); +BSCallback *create_bscallback(IMoniker*); HRESULT start_binding(BSCallback*); +void set_document_bscallback(HTMLDocument*,BSCallback*);
IHlink *Hlink_Create(void); IHTMLSelectionObject *HTMLSelectionObject_Create(nsISelection*); diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c index 15b38b6..9bb1c31 100644 --- a/dlls/mshtml/navigate.c +++ b/dlls/mshtml/navigate.c @@ -586,7 +586,7 @@ static const IServiceProviderVtbl Servic BSCServiceProvider_QueryService };
-BSCallback *create_bscallback(HTMLDocument *doc, IMoniker *mon) +BSCallback *create_bscallback(IMoniker *mon) { BSCallback *ret = mshtml_alloc(sizeof(BSCallback));
@@ -604,6 +604,7 @@ BSCallback *create_bscallback(HTMLDocume ret->nscontext = NULL; ret->nsstream = NULL; ret->binding = NULL; + ret->doc = NULL;
if(mon) IMoniker_AddRef(mon); @@ -690,7 +691,7 @@ void hlink_frame_navigate(HTMLDocument * IMoniker *mon; IHlink *hlink;
- callback = create_bscallback(doc, NULL); + callback = create_bscallback(NULL);
if(post_data_stream) { parse_post_data(post_data_stream, &callback->headers, &callback->post_data, @@ -745,3 +746,20 @@ HRESULT start_binding(BSCallback *bscall bscallback->mon = NULL; return S_OK; } + +void set_document_bscallback(HTMLDocument *doc, BSCallback *callback) +{ + if(doc->bscallback) { + if(doc->bscallback->binding) + IBinding_Abort(doc->bscallback->binding); + doc->bscallback->doc = NULL; + IBindStatusCallback_Release(STATUSCLB(doc->bscallback)); + } + + doc->bscallback = callback; + + if(callback) { + IBindStatusCallback_AddRef(STATUSCLB(callback)); + callback->doc = doc; + } +} diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c index d643e35..24a70b5 100644 --- a/dlls/mshtml/nsio.c +++ b/dlls/mshtml/nsio.c @@ -668,7 +668,7 @@ static nsresult NSAPI nsChannel_AsyncOpe return NS_ERROR_UNEXPECTED; }
- bscallback = create_bscallback(NULL, mon); + bscallback = create_bscallback(mon); IMoniker_Release(mon);
nsIChannel_AddRef(NSCHANNEL(This)); diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c index c9baf7c..f2347a0 100644 --- a/dlls/mshtml/persist.c +++ b/dlls/mshtml/persist.c @@ -218,7 +218,7 @@ static HRESULT WINAPI PersistMoniker_Loa } }
- bscallback = create_bscallback(This, pimkName); + bscallback = create_bscallback(pimkName);
task = mshtml_alloc(sizeof(task_t));
@@ -260,6 +260,7 @@ static HRESULT WINAPI PersistMoniker_Loa if(pibc) FIXME("not supported pibc\n");
+ set_document_bscallback(This, bscallback); hres = start_binding(bscallback);
IBindStatusCallback_Release(STATUSCLB(bscallback)); @@ -508,4 +509,6 @@ void HTMLDocument_Persist_Init(HTMLDocum This->lpPersistFileVtbl = &PersistFileVtbl; This->lpMonikerPropVtbl = &MonikerPropVtbl; This->lpPersistStreamInitVtbl = &PersistStreamInitVtbl; + + This->bscallback = NULL; }