mshtml: Moved event_vector to HTMLDocumentNode.
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index a5422f2..bc20a2d 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c
@@ -1777,6 +1777,7 @@ nsIDOMHTMLDocument_Release(This->nsdoc); } + heap_free(This->event_vector); destroy_htmldoc(&This->basedoc); }
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index d1cc6b7..345fd83 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c
@@ -921,7 +921,8 @@ return TRUE; } -static HRESULT set_event_handler_disp(event_target_t **event_target_ptr, HTMLWindow *window, eventid_t eid, IDispatch *disp) +static HRESULT set_event_handler_disp(event_target_t **event_target_ptr, HTMLDocumentNode *doc, + eventid_t eid, IDispatch *disp) { event_target_t *event_target; @@ -940,23 +941,23 @@ return S_OK; IDispatch_AddRef(disp); - if(window->nswindow && (event_info[eid].flags & EVENT_DEFAULTLISTENER)) { - if(!window->event_vector) { - window->event_vector = heap_alloc_zero(EVENTID_LAST*sizeof(BOOL)); - if(!window->event_vector) + if(doc->nsdoc && (event_info[eid].flags & EVENT_DEFAULTLISTENER)) { + if(!doc->event_vector) { + doc->event_vector = heap_alloc_zero(EVENTID_LAST*sizeof(BOOL)); + if(!doc->event_vector) return E_OUTOFMEMORY; } - if(!window->event_vector[eid]) { - window->event_vector[eid] = TRUE; - add_nsevent_listener(window, event_info[eid].name); + if(!doc->event_vector[eid]) { + doc->event_vector[eid] = TRUE; + add_nsevent_listener(doc, event_info[eid].name); } } return S_OK; } -HRESULT set_event_handler(event_target_t **event_target, HTMLDocument *doc, eventid_t eid, VARIANT *var) +HRESULT set_event_handler(event_target_t **event_target, HTMLDocumentNode *doc, eventid_t eid, VARIANT *var) { switch(V_VT(var)) { case VT_NULL: @@ -967,7 +968,7 @@ break; case VT_DISPATCH: - return set_event_handler_disp(event_target, doc->window, eid, V_DISPATCH(var)); + return set_event_handler_disp(event_target, doc, eid, V_DISPATCH(var)); default: FIXME("not supported vt=%d\n", V_VT(var)); @@ -1048,7 +1049,7 @@ disp = script_parse_event(doc->basedoc.window, attr_value); if(disp) { node = get_node(doc, (nsIDOMNode*)nselem, TRUE); - set_event_handler_disp(get_node_event_target(node), node->doc->basedoc.window, i, disp); + set_event_handler_disp(get_node_event_target(node), node->doc, i, disp); IDispatch_Release(disp); } }
diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h index 21e7ff0..d0332ee 100644 --- a/dlls/mshtml/htmlevent.h +++ b/dlls/mshtml/htmlevent.h
@@ -42,7 +42,7 @@ void check_event_attr(HTMLDocumentNode*,nsIDOMElement*); void release_event_target(event_target_t*); void fire_event(HTMLDocumentNode*,eventid_t,nsIDOMNode*,nsIDOMEvent*); -HRESULT set_event_handler(event_target_t**,HTMLDocument*,eventid_t,VARIANT*); +HRESULT set_event_handler(event_target_t**,HTMLDocumentNode*,eventid_t,VARIANT*); HRESULT get_event_handler(event_target_t**,eventid_t,VARIANT*); HRESULT attach_event(event_target_t**,HTMLDocument*,BSTR,IDispatch*,VARIANT_BOOL*); HRESULT dispatch_event(HTMLDOMNode*,const WCHAR*,VARIANT*,VARIANT_BOOL*); @@ -55,7 +55,7 @@ static inline HRESULT set_node_event(HTMLDOMNode *node, eventid_t eid, VARIANT *var) { - return set_event_handler(get_node_event_target(node), &node->doc->basedoc, eid, var); + return set_event_handler(get_node_event_target(node), node->doc, eid, var); } static inline HRESULT get_node_event(HTMLDOMNode *node, eventid_t eid, VARIANT *var) @@ -75,7 +75,7 @@ static inline HRESULT set_window_event(HTMLWindow *window, eventid_t eid, VARIANT *var) { - return set_event_handler(&window->event_target, &window->doc_obj->basedoc, eid, var); + return set_event_handler(&window->event_target, window->doc, eid, var); } static inline HRESULT get_window_event(HTMLWindow *window, eventid_t eid, VARIANT *var)
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index c66f245..9b8dda3 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c
@@ -189,7 +189,6 @@ windowref_release(This->window_ref); heap_free(This->global_props); - heap_free(This->event_vector); release_script_hosts(This); list_remove(&This->entry); release_dispex(&This->dispex);
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index e3a12b2..d0fdb29 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h
@@ -226,7 +226,6 @@ event_target_t *event_target; IHTMLEventObj *event; - BOOL *event_vector; SCRIPTMODE scriptmode; struct list script_hosts; @@ -487,6 +486,7 @@ IInternetSecurityManager *secmgr; nsDocumentEventListener *nsevent_listener; + BOOL *event_vector; mutation_queue_t *mutation_queue; mutation_queue_t *mutation_queue_tail; @@ -652,7 +652,7 @@ void init_nsevents(HTMLDocumentNode*); void release_nsevents(HTMLDocumentNode*); -void add_nsevent_listener(HTMLWindow*,LPCWSTR); +void add_nsevent_listener(HTMLDocumentNode*,LPCWSTR); void set_window_bscallback(HTMLWindow*,nsChannelBSC*); void set_current_mon(HTMLWindow*,IMoniker*);
diff --git a/dlls/mshtml/nsevents.c b/dlls/mshtml/nsevents.c index 3aef738..aa87442 100644 --- a/dlls/mshtml/nsevents.c +++ b/dlls/mshtml/nsevents.c
@@ -282,18 +282,18 @@ This->This = listener; } -void add_nsevent_listener(HTMLWindow *window, LPCWSTR type) +void add_nsevent_listener(HTMLDocumentNode *doc, LPCWSTR type) { nsIDOMEventTarget *target; nsresult nsres; - nsres = nsIDOMWindow_QueryInterface(window->nswindow, &IID_nsIDOMEventTarget, (void**)&target); + nsres = nsIDOMWindow_QueryInterface(doc->basedoc.window->nswindow, &IID_nsIDOMEventTarget, (void**)&target); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMEventTarget interface: %08x\n", nsres); return; } - init_event(target, type, NSEVENTLIST(&window->doc->nsevent_listener->htmlevent_listener), TRUE); + init_event(target, type, NSEVENTLIST(&doc->nsevent_listener->htmlevent_listener), TRUE); nsIDOMEventTarget_Release(target); }