Jacek Caban : mshtml: Moved readystate to HTMLWindow.

Alexandre Julliard julliard at winehq.org
Tue Nov 3 15:37:18 CST 2009


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sun Nov  1 19:25:13 2009 +0100

mshtml: Moved readystate to HTMLWindow.

---

 dlls/mshtml/editor.c         |    6 +++---
 dlls/mshtml/htmldoc.c        |    5 ++---
 dlls/mshtml/htmldoc3.c       |    2 +-
 dlls/mshtml/htmlwindow.c     |    1 +
 dlls/mshtml/mshtml_private.h |    2 +-
 dlls/mshtml/mutation.c       |    2 +-
 dlls/mshtml/nsevents.c       |    5 ++++-
 dlls/mshtml/olecmd.c         |    2 +-
 dlls/mshtml/persist.c        |    2 +-
 9 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/dlls/mshtml/editor.c b/dlls/mshtml/editor.c
index 651e856..568e127 100644
--- a/dlls/mshtml/editor.c
+++ b/dlls/mshtml/editor.c
@@ -150,7 +150,7 @@ static DWORD query_ns_edit_status(HTMLDocument *This, const char *nscmd)
     nsICommandParams *nsparam;
     PRBool b = FALSE;
 
-    if(This->doc_obj->usermode != EDITMODE || This->doc_obj->readystate < READYSTATE_INTERACTIVE)
+    if(This->doc_obj->usermode != EDITMODE || This->window->readystate < READYSTATE_INTERACTIVE)
         return OLECMDF_SUPPORTED;
 
     if(This->doc_obj->nscontainer && nscmd) {
@@ -185,7 +185,7 @@ static DWORD query_align_status(HTMLDocument *This, const char *align_str)
     nsICommandParams *nsparam;
     char *align = NULL;
 
-    if(This->doc_obj->usermode != EDITMODE || This->doc_obj->readystate < READYSTATE_INTERACTIVE)
+    if(This->doc_obj->usermode != EDITMODE || This->window->readystate < READYSTATE_INTERACTIVE)
         return OLECMDF_SUPPORTED;
 
     if(This->doc_obj->nscontainer) {
@@ -713,7 +713,7 @@ static HRESULT query_justify(HTMLDocument *This, OLECMD *cmd)
     case IDM_JUSTIFYLEFT:
         TRACE("(%p) IDM_JUSTIFYLEFT\n", This);
         /* FIXME: We should set OLECMDF_LATCHED only if it's set explicitly. */
-        if(This->doc_obj->usermode != EDITMODE || This->doc_obj->readystate < READYSTATE_INTERACTIVE)
+        if(This->doc_obj->usermode != EDITMODE || This->window->readystate < READYSTATE_INTERACTIVE)
             cmd->cmdf = OLECMDF_SUPPORTED;
         else
             cmd->cmdf = OLECMDF_SUPPORTED | OLECMDF_ENABLED;
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index bc20a2d..836f1ae 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -455,7 +455,7 @@ static HRESULT WINAPI HTMLDocument_get_readyState(IHTMLDocument2 *iface, BSTR *p
     if(!p)
         return E_POINTER;
 
-    *p = SysAllocString(readystate_str[This->doc_obj->readystate]);
+    *p = SysAllocString(readystate_str[This->window->readystate]);
     return S_OK;
 }
 
@@ -1503,7 +1503,7 @@ static HRESULT WINAPI DocDispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMemb
             return E_INVALIDARG;
 
         V_VT(pVarResult) = VT_I4;
-        V_I4(pVarResult) = This->doc_obj->readystate;
+        V_I4(pVarResult) = This->window->readystate;
         return S_OK;
     }
 
@@ -1978,7 +1978,6 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject)
     doc->basedoc.doc_obj = doc;
 
     doc->usermode = UNKNOWN_USERMODE;
-    doc->readystate = READYSTATE_UNINITIALIZED;
 
     doc->nscontainer = NSContainer_Create(doc, NULL);
     if(!doc->nscontainer) {
diff --git a/dlls/mshtml/htmldoc3.c b/dlls/mshtml/htmldoc3.c
index e4c2d4f..a00fa95 100644
--- a/dlls/mshtml/htmldoc3.c
+++ b/dlls/mshtml/htmldoc3.c
@@ -141,7 +141,7 @@ static HRESULT WINAPI HTMLDocument3_get_documentElement(IHTMLDocument3 *iface, I
 
     TRACE("(%p)->(%p)\n", This, p);
 
-    if(This->doc_obj->readystate == READYSTATE_UNINITIALIZED) {
+    if(This->window->readystate == READYSTATE_UNINITIALIZED) {
         *p = NULL;
         return S_OK;
     }
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c
index 6158b32..9f3b3e7 100644
--- a/dlls/mshtml/htmlwindow.c
+++ b/dlls/mshtml/htmlwindow.c
@@ -1648,6 +1648,7 @@ HRESULT HTMLWindow_Create(HTMLDocumentObj *doc_obj, nsIDOMWindow *nswindow, HTML
     }
 
     window->scriptmode = parent ? parent->scriptmode : SCRIPTMODE_GECKO;
+    window->readystate = READYSTATE_UNINITIALIZED;
     list_init(&window->script_hosts);
 
     window->task_magic = get_task_target_magic();
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 175dce7..94d835d 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -227,6 +227,7 @@ struct HTMLWindow {
     nsIDOMWindow *nswindow;
     HTMLWindow *parent;
     HTMLFrameBase *frame_element;
+    READYSTATE readystate;
 
     nsChannelBSC *bscallback;
     IMoniker *mon;
@@ -366,7 +367,6 @@ struct HTMLDocumentObj {
     BOOL focus;
 
     USERMODE usermode;
-    READYSTATE readystate;
     LPWSTR mime;
 
     DWORD update;
diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c
index ba636dd..b3cc62a 100644
--- a/dlls/mshtml/mutation.c
+++ b/dlls/mshtml/mutation.c
@@ -366,7 +366,7 @@ static void handle_end_load(HTMLDocumentNode *This)
     TRACE("\n");
 
     if(This != This->basedoc.doc_obj->basedoc.doc_node) {
-        set_ready_state(This, READYSTATE_INTERACTIVE);
+        set_ready_state(This->basedoc.window, READYSTATE_INTERACTIVE);
         return;
     }
 
diff --git a/dlls/mshtml/nsevents.c b/dlls/mshtml/nsevents.c
index aa87442..096dcb3 100644
--- a/dlls/mshtml/nsevents.c
+++ b/dlls/mshtml/nsevents.c
@@ -123,7 +123,7 @@ static nsresult NSAPI handle_blur(nsIDOMEventListener *iface, nsIDOMEvent *event
 
     TRACE("(%p)\n", doc);
 
-    if(!doc)
+    if(!doc || !doc->basedoc.doc_obj)
         return NS_ERROR_FAILURE;
     doc_obj = doc->basedoc.doc_obj;
 
@@ -195,6 +195,9 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event
     if(doc_obj->usermode == EDITMODE)
         handle_edit_load(&doc_obj->basedoc);
 
+    if(doc->basedoc.window->readystate != READYSTATE_COMPLETE)
+        set_ready_state(doc->basedoc.window, READYSTATE_COMPLETE);
+
     if(!doc->nsdoc) {
         ERR("NULL nsdoc\n");
         return NS_ERROR_FAILURE;
diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c
index bd3b162..b54f064 100644
--- a/dlls/mshtml/olecmd.c
+++ b/dlls/mshtml/olecmd.c
@@ -555,7 +555,7 @@ static HRESULT exec_editmode(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in,
     if(This->doc_obj->frame)
         IOleInPlaceFrame_SetStatusText(This->doc_obj->frame, NULL);
 
-    This->doc_obj->readystate = READYSTATE_UNINITIALIZED;
+    This->window->readystate = READYSTATE_UNINITIALIZED;
 
     if(This->doc_obj->client) {
         IOleCommandTarget *cmdtrg;
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index ec2c830..805d7f0 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -275,7 +275,7 @@ static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BO
 
 void set_ready_state(HTMLWindow *window, READYSTATE readystate)
 {
-    window->doc_obj->readystate = readystate;
+    window->readystate = readystate;
     if(window->doc_obj->basedoc.window == window)
         call_property_onchanged(&window->doc_obj->basedoc.cp_propnotif, DISPID_READYSTATE);
 }




More information about the wine-cvs mailing list