Module: wine Branch: master Commit: bc02ba80b922f0e62e00cb366e0f592115b4a63d URL: http://source.winehq.org/git/wine.git/?a=commit;h=bc02ba80b922f0e62e00cb366e...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Feb 13 21:11:50 2017 +0100
mshtml: Pass event target as EventTarget to release_event_target.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/mshtml/htmlevent.c | 21 +++++++++++++-------- dlls/mshtml/htmlevent.h | 2 +- dlls/mshtml/htmlnode.c | 3 +-- dlls/mshtml/htmlwindow.c | 3 +-- 4 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c index e844728..7d11747 100644 --- a/dlls/mshtml/htmlevent.c +++ b/dlls/mshtml/htmlevent.c @@ -1642,20 +1642,25 @@ HRESULT doc_init_events(HTMLDocumentNode *doc) return S_OK; }
-void release_event_target(event_target_t *event_target) +void release_event_target(EventTarget *event_target) { int i; unsigned int j;
+ if(!event_target->ptr) + return; + for(i=0; i < EVENTID_LAST; i++) { - if(event_target->event_table[i]) { - if(event_target->event_table[i]->handler_prop) - IDispatch_Release(event_target->event_table[i]->handler_prop); - for(j=0; j < event_target->event_table[i]->handler_cnt; j++) - if(event_target->event_table[i]->handlers[j]) - IDispatch_Release(event_target->event_table[i]->handlers[j]); + if(event_target->ptr->event_table[i]) { + if(event_target->ptr->event_table[i]->handler_prop) + IDispatch_Release(event_target->ptr->event_table[i]->handler_prop); + for(j=0; j < event_target->ptr->event_table[i]->handler_cnt; j++) + if(event_target->ptr->event_table[i]->handlers[j]) + IDispatch_Release(event_target->ptr->event_table[i]->handlers[j]); + heap_free(event_target->ptr->event_table[i]->handlers); + heap_free(event_target->ptr->event_table[i]); } }
- heap_free(event_target); + heap_free(event_target->ptr); } diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h index cc16fd8..d66f359 100644 --- a/dlls/mshtml/htmlevent.h +++ b/dlls/mshtml/htmlevent.h @@ -55,7 +55,7 @@ typedef enum {
eventid_t str_to_eid(LPCWSTR) DECLSPEC_HIDDEN; void check_event_attr(HTMLDocumentNode*,nsIDOMHTMLElement*) DECLSPEC_HIDDEN; -void release_event_target(event_target_t*) DECLSPEC_HIDDEN; +void release_event_target(EventTarget*) DECLSPEC_HIDDEN; void fire_event(HTMLDocumentNode*,eventid_t,BOOL,HTMLDOMNode*,nsIDOMEvent*,IDispatch*) DECLSPEC_HIDDEN; HRESULT set_event_handler(EventTarget*,eventid_t,VARIANT*) DECLSPEC_HIDDEN; HRESULT get_event_handler(EventTarget*,eventid_t,VARIANT*) DECLSPEC_HIDDEN; diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 1ba477e..ab47323 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -1185,12 +1185,11 @@ HRESULT HTMLDOMNode_QI(HTMLDOMNode *This, REFIID riid, void **ppv)
void HTMLDOMNode_destructor(HTMLDOMNode *This) { + release_event_target(&This->event_target); if(This->nsnode) nsIDOMNode_Release(This->nsnode); if(This->doc && &This->doc->node != This) htmldoc_release(&This->doc->basedoc); - if(This->event_target.ptr) - release_event_target(This->event_target.ptr); }
static HRESULT HTMLDOMNode_clone(HTMLDOMNode *This, nsIDOMNode *nsnode, HTMLDOMNode **ret) diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index aa64fb4..e3f22cf 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -253,8 +253,7 @@ static void release_inner_window(HTMLInnerWindow *This) htmldoc_release(&This->doc->basedoc); }
- if(This->event_target.ptr) - release_event_target(This->event_target.ptr); + release_event_target(&This->event_target); release_dispex(&This->event_target.dispex);
for(i=0; i < This->global_prop_cnt; i++)