Jacek Caban : mshtml: Moved binding variables to HTMLDocumentObj.
Alexandre Julliard
julliard at winehq.org
Thu Sep 17 13:52:32 CDT 2009
Module: wine
Branch: master
Commit: e52e57cf2b9188e59a8ec47d8a74a84fb0098e81
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e52e57cf2b9188e59a8ec47d8a74a84fb0098e81
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Sep 16 22:12:06 2009 +0200
mshtml: Moved binding variables to HTMLDocumentObj.
---
dlls/mshtml/htmldoc.c | 12 +++++-------
dlls/mshtml/htmllocation.c | 4 ++--
dlls/mshtml/mshtml_private.h | 11 ++++++-----
dlls/mshtml/navigate.c | 18 +++++++++---------
dlls/mshtml/olecmd.c | 8 ++++----
dlls/mshtml/persist.c | 33 ++++++++++++++-------------------
6 files changed, 40 insertions(+), 46 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 5261c97..2b0fe95 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -588,8 +588,8 @@ static HRESULT WINAPI HTMLDocument_get_URL(IHTMLDocument2 *iface, BSTR *p)
TRACE("(%p)->(%p)\n", iface, p);
- *p = SysAllocString(This->url ? This->url : about_blank_url);
- return S_OK;
+ *p = SysAllocString(This->doc_obj->url ? This->doc_obj->url : about_blank_url);
+ return *p ? S_OK : E_OUTOFMEMORY;
}
static HRESULT WINAPI HTMLDocument_put_domain(IHTMLDocument2 *iface, BSTR v)
@@ -1739,8 +1739,6 @@ static void init_doc(HTMLDocument *doc, const htmldoc_vtbl_t *vtbl)
doc->lpSupportErrorInfoVtbl = &SupportErrorInfoVtbl;
doc->readystate = READYSTATE_UNINITIALIZED;
- list_init(&doc->bindings);
-
HTMLDocument_HTMLDocument3_Init(doc);
HTMLDocument_HTMLDocument5_Init(doc);
HTMLDocument_Persist_Init(doc);
@@ -1763,9 +1761,6 @@ static void destroy_htmldoc(HTMLDocument *This)
{
remove_doc_tasks(This);
- set_document_bscallback(This, NULL);
- set_current_mon(This, NULL);
-
if(This->event_target)
release_event_target(This->event_target);
@@ -1876,6 +1871,8 @@ static ULONG HTMLDocumentObj_Release(HTMLDocument *base)
TRACE("(%p) ref = %u\n", This, ref);
if(!ref) {
+ set_document_bscallback(&This->basedoc, NULL);
+ set_current_mon(&This->basedoc, NULL);
if(This->basedoc.doc_node) {
This->basedoc.doc_node->basedoc.doc_obj = NULL;
IHTMLDocument2_Release(HTMLDOC(&This->basedoc.doc_node->basedoc));
@@ -1942,6 +1939,7 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject)
return hres;
doc->nscontainer = NSContainer_Create(doc, NULL);
+ list_init(&doc->bindings);
if(doc->nscontainer) {
nsresult nsres;
diff --git a/dlls/mshtml/htmllocation.c b/dlls/mshtml/htmllocation.c
index 7006a76..470d679 100644
--- a/dlls/mshtml/htmllocation.c
+++ b/dlls/mshtml/htmllocation.c
@@ -37,12 +37,12 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
static HRESULT get_url(HTMLLocation *This, const WCHAR **ret)
{
- if(!This->window || !This->window->doc_obj || !This->window->doc_obj->basedoc.url) {
+ if(!This->window || !This->window->doc_obj || !This->window->doc_obj->url) {
FIXME("No current URL\n");
return E_NOTIMPL;
}
- *ret = This->window->doc_obj->basedoc.url;
+ *ret = This->window->doc_obj->url;
return S_OK;
}
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 1c744ed..e07f580 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -284,11 +284,6 @@ struct HTMLDocument {
HTMLWindow *window;
nsIDOMHTMLDocument *nsdoc;
- nsChannelBSC *bscallback;
- IMoniker *mon;
- LPOLESTR url;
- struct list bindings;
-
USERMODE usermode;
READYSTATE readystate;
LPWSTR mime;
@@ -354,6 +349,12 @@ struct HTMLDocumentObj {
BOOL has_key_path;
BOOL container_locked;
BOOL focus;
+
+ /* FIXME: probably should be in document node object */
+ nsChannelBSC *bscallback;
+ IMoniker *mon;
+ LPOLESTR url;
+ struct list bindings;
};
typedef struct {
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index 3b0571c..267168f 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -313,7 +313,7 @@ static HRESULT WINAPI BindStatusCallback_OnStartBinding(IBindStatusCallback *ifa
This->binding = pbind;
if(This->doc)
- list_add_head(&This->doc->bindings, &This->entry);
+ list_add_head(&This->doc->doc_obj->bindings, &This->entry);
return This->vtbl->start_binding(This);
}
@@ -949,7 +949,7 @@ static HRESULT read_stream_data(nsChannelBSC *This, IStream *stream)
on_start_nsrequest(This);
/* events are reset when a new document URI is loaded, so re-initialise them here */
- if(This->bsc.doc && This->bsc.doc->bscallback == This && This->bsc.doc->doc_obj->nscontainer) {
+ if(This->bsc.doc && This->bsc.doc->doc_obj->bscallback == This && This->bsc.doc->doc_obj->nscontainer) {
update_nsdocument(This->bsc.doc->doc_obj);
init_nsevents(This->bsc.doc->doc_obj->nscontainer);
}
@@ -1109,19 +1109,19 @@ void set_document_bscallback(HTMLDocument *doc, nsChannelBSC *callback)
{
BSCallback *iter;
- if(doc->bscallback) {
- if(doc->bscallback->bsc.binding)
- IBinding_Abort(doc->bscallback->bsc.binding);
- doc->bscallback->bsc.doc = NULL;
- IBindStatusCallback_Release(STATUSCLB(&doc->bscallback->bsc));
+ if(doc->doc_obj->bscallback) {
+ if(doc->doc_obj->bscallback->bsc.binding)
+ IBinding_Abort(doc->doc_obj->bscallback->bsc.binding);
+ doc->doc_obj->bscallback->bsc.doc = NULL;
+ IBindStatusCallback_Release(STATUSCLB(&doc->doc_obj->bscallback->bsc));
}
- LIST_FOR_EACH_ENTRY(iter, &doc->bindings, BSCallback, entry) {
+ LIST_FOR_EACH_ENTRY(iter, &doc->doc_obj->bindings, BSCallback, entry) {
iter->doc = NULL;
list_remove(&iter->entry);
}
- doc->bscallback = callback;
+ doc->doc_obj->bscallback = callback;
if(callback) {
IBindStatusCallback_AddRef(STATUSCLB(&callback->bsc));
diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c
index d8da015..bf5b7c1 100644
--- a/dlls/mshtml/olecmd.c
+++ b/dlls/mshtml/olecmd.c
@@ -543,9 +543,9 @@ static HRESULT exec_editmode(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in,
This->usermode = EDITMODE;
- if(This->mon) {
+ if(This->doc_obj->mon) {
CLSID clsid = IID_NULL;
- hres = IMoniker_GetClassID(This->mon, &clsid);
+ hres = IMoniker_GetClassID(This->doc_obj->mon, &clsid);
if(SUCCEEDED(hres)) {
/* We should use IMoniker::Save here */
FIXME("Use CLSID %s\n", debugstr_guid(&clsid));
@@ -588,11 +588,11 @@ static HRESULT exec_editmode(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in,
update_doc(This, UPDATE_UI);
- if(This->mon) {
+ if(This->doc_obj->mon) {
/* FIXME: We should find nicer way to do this */
remove_doc_tasks(This);
- mon = This->mon;
+ mon = This->doc_obj->mon;
IMoniker_AddRef(mon);
}else {
static const WCHAR about_blankW[] = {'a','b','o','u','t',':','b','l','a','n','k',0};
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 872ed1e..7ff3821 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -52,27 +52,27 @@ void set_current_mon(HTMLDocument *This, IMoniker *mon)
{
HRESULT hres;
- if(This->mon) {
- IMoniker_Release(This->mon);
- This->mon = NULL;
+ if(This->doc_obj->mon) {
+ IMoniker_Release(This->doc_obj->mon);
+ This->doc_obj->mon = NULL;
}
- if(This->url) {
- CoTaskMemFree(This->url);
- This->url = NULL;
+ if(This->doc_obj->url) {
+ CoTaskMemFree(This->doc_obj->url);
+ This->doc_obj->url = NULL;
}
if(!mon)
return;
IMoniker_AddRef(mon);
- This->mon = mon;
+ This->doc_obj->mon = mon;
- hres = IMoniker_GetDisplayName(mon, NULL, NULL, &This->url);
+ hres = IMoniker_GetDisplayName(mon, NULL, NULL, &This->doc_obj->url);
if(FAILED(hres))
WARN("GetDisplayName failed: %08x\n", hres);
- set_script_mode(This->window, use_gecko_script(This->url) ? SCRIPTMODE_GECKO : SCRIPTMODE_ACTIVESCRIPT);
+ set_script_mode(This->window, use_gecko_script(This->doc_obj->url) ? SCRIPTMODE_GECKO : SCRIPTMODE_ACTIVESCRIPT);
}
static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BOOL *bind_complete)
@@ -292,7 +292,7 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
return hres;
if(!bind_complete)
- return start_binding(This, (BSCallback*)This->bscallback, pibc);
+ return start_binding(This, (BSCallback*)This->doc_obj->bscallback, pibc);
return S_OK;
}
@@ -318,11 +318,11 @@ static HRESULT WINAPI PersistMoniker_GetCurMoniker(IPersistMoniker *iface, IMoni
TRACE("(%p)->(%p)\n", This, ppimkName);
- if(!This->mon)
+ if(!This->doc_obj->mon)
return E_UNEXPECTED;
- IMoniker_AddRef(This->mon);
- *ppimkName = This->mon;
+ IMoniker_AddRef(This->doc_obj->mon);
+ *ppimkName = This->doc_obj->mon;
return S_OK;
}
@@ -556,7 +556,7 @@ static HRESULT WINAPI PersistStreamInit_Load(IPersistStreamInit *iface, LPSTREAM
if(FAILED(hres))
return hres;
- return channelbsc_load_stream(This->bscallback, pStm);
+ return channelbsc_load_stream(This->doc_obj->bscallback, pStm);
}
static HRESULT WINAPI PersistStreamInit_Save(IPersistStreamInit *iface, LPSTREAM pStm,
@@ -692,9 +692,4 @@ void HTMLDocument_Persist_Init(HTMLDocument *This)
This->lpMonikerPropVtbl = &MonikerPropVtbl;
This->lpPersistStreamInitVtbl = &PersistStreamInitVtbl;
This->lpPersistHistoryVtbl = &PersistHistoryVtbl;
-
- This->bscallback = NULL;
- This->mon = NULL;
- This->url = NULL;
- This->mime = NULL;
}
More information about the wine-cvs
mailing list