Jacek Caban : mshtml: Pass EventTarget to detach_event.

Alexandre Julliard julliard at wine.codeweavers.com
Fri May 15 08:38:42 CDT 2015


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu May 14 13:25:47 2015 +0200

mshtml: Pass EventTarget to detach_event.

---

 dlls/mshtml/htmldoc.c    |  2 +-
 dlls/mshtml/htmlelem.c   |  2 +-
 dlls/mshtml/htmlevent.c  | 20 +++++++++++---------
 dlls/mshtml/htmlevent.h  |  2 +-
 dlls/mshtml/htmlwindow.c |  2 +-
 5 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 2b30c67..b293367 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -2042,7 +2042,7 @@ static HRESULT WINAPI HTMLDocument3_detachEvent(IHTMLDocument3 *iface, BSTR even
 
     TRACE("(%p)->(%s %p)\n", This, debugstr_w(event), pDisp);
 
-    return detach_event(This->doc_node->node.event_target.ptr, This, event, pDisp);
+    return detach_event(&This->doc_node->node.event_target, This, event, pDisp);
 }
 
 static HRESULT WINAPI HTMLDocument3_put_onrowsdelete(IHTMLDocument3 *iface, VARIANT v)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 8777e45..d2ae0be 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -2575,7 +2575,7 @@ static HRESULT WINAPI HTMLElement2_detachEvent(IHTMLElement2 *iface, BSTR event,
 
     TRACE("(%p)->(%s %p)\n", This, debugstr_w(event), pDisp);
 
-    return detach_event(*get_node_event_target(&This->node), &This->node.doc->basedoc, event, pDisp);
+    return detach_event(&This->node.event_target, &This->node.doc->basedoc, event, pDisp);
 }
 
 static HRESULT WINAPI HTMLElement2_get_readyState(IHTMLElement2 *iface, VARIANT *p)
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index 527bed2..18bca41 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -1518,27 +1518,29 @@ HRESULT attach_event(EventTarget *event_target, HTMLDocument *doc, BSTR name,
     return ensure_nsevent_handler(doc->doc_node, data, eid);
 }
 
-HRESULT detach_event(event_target_t *event_target, HTMLDocument *doc, BSTR name, IDispatch *disp)
+HRESULT detach_event(EventTarget *event_target, HTMLDocument *doc, BSTR name, IDispatch *disp)
 {
+    event_target_t *data;
     eventid_t eid;
     DWORD i = 0;
 
-    if(!event_target)
-        return S_OK;
-
     eid = attr_to_eid(name);
     if(eid == EVENTID_LAST) {
         WARN("Unknown event\n");
         return S_OK;
     }
 
-    if(!event_target->event_table[eid])
+    data = get_event_target_data(event_target, FALSE);
+    if(!data)
+        return S_OK;
+
+    if(!data->event_table[eid])
         return S_OK;
 
-    while(i < event_target->event_table[eid]->handler_cnt) {
-        if(event_target->event_table[eid]->handlers[i] == disp) {
-            IDispatch_Release(event_target->event_table[eid]->handlers[i]);
-            event_target->event_table[eid]->handlers[i] = NULL;
+    while(i < data->event_table[eid]->handler_cnt) {
+        if(data->event_table[eid]->handlers[i] == disp) {
+            IDispatch_Release(data->event_table[eid]->handlers[i]);
+            data->event_table[eid]->handlers[i] = NULL;
         }
         i++;
     }
diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h
index e3a4e7f..8c3163e 100644
--- a/dlls/mshtml/htmlevent.h
+++ b/dlls/mshtml/htmlevent.h
@@ -57,7 +57,7 @@ void fire_event(HTMLDocumentNode*,eventid_t,BOOL,nsIDOMNode*,nsIDOMEvent*,IDispa
 HRESULT set_event_handler(EventTarget*,HTMLDocumentNode*,eventid_t,VARIANT*) DECLSPEC_HIDDEN;
 HRESULT get_event_handler(EventTarget*,eventid_t,VARIANT*) DECLSPEC_HIDDEN;
 HRESULT attach_event(EventTarget*,HTMLDocument*,BSTR,IDispatch*,VARIANT_BOOL*) DECLSPEC_HIDDEN;
-HRESULT detach_event(event_target_t*,HTMLDocument*,BSTR,IDispatch*) DECLSPEC_HIDDEN;
+HRESULT detach_event(EventTarget*,HTMLDocument*,BSTR,IDispatch*) DECLSPEC_HIDDEN;
 HRESULT dispatch_event(HTMLDOMNode*,const WCHAR*,VARIANT*,VARIANT_BOOL*) DECLSPEC_HIDDEN;
 HRESULT call_fire_event(HTMLDOMNode*,eventid_t) DECLSPEC_HIDDEN;
 void update_cp_events(HTMLInnerWindow*,event_target_t**,cp_static_data_t*) DECLSPEC_HIDDEN;
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c
index b98d618..01ce10e 100644
--- a/dlls/mshtml/htmlwindow.c
+++ b/dlls/mshtml/htmlwindow.c
@@ -1669,7 +1669,7 @@ static HRESULT WINAPI HTMLWindow3_detachEvent(IHTMLWindow3 *iface, BSTR event, I
         return E_FAIL;
     }
 
-    return detach_event(window->doc->body_event_target, &window->doc->basedoc, event, pDisp);
+    return detach_event(&window->event_target, &window->doc->basedoc, event, pDisp);
 }
 
 static HRESULT window_set_timer(HTMLInnerWindow *This, VARIANT *expr, LONG msec, VARIANT *language,




More information about the wine-cvs mailing list