Jacek Caban : mshtml: Set current event target in fire_event_obj.

Alexandre Julliard julliard at winehq.org
Thu Oct 19 14:31:35 CDT 2017


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Oct 19 17:01:55 2017 +0200

mshtml: Set current event target in fire_event_obj.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/htmlevent.c       | 14 ++++++++------
 dlls/mshtml/tests/events.html | 16 ++++++++++++++++
 2 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index 6f81a89..cffd6c8 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -812,7 +812,7 @@ static HTMLEventObj *create_event(void)
     return ret;
 }
 
-static HRESULT set_event_info(HTMLEventObj *event, EventTarget *target, eventid_t eid, HTMLDocumentNode *doc, nsIDOMEvent *nsevent)
+static HRESULT set_event_info(HTMLEventObj *event, eventid_t eid, HTMLDocumentNode *doc, nsIDOMEvent *nsevent)
 {
     event->type = event_info+eid;
     event->nsevent = nsevent;
@@ -832,9 +832,6 @@ static HRESULT set_event_info(HTMLEventObj *event, EventTarget *target, eventid_
         }
     }
 
-    event->target = target;
-    if(target)
-        IDispatchEx_AddRef(&target->dispex.IDispatchEx_iface);
     return S_OK;
 }
 
@@ -1109,6 +1106,11 @@ static void fire_event_obj(EventTarget *event_target, eventid_t eid, HTMLEventOb
     if(target_vtbl && target_vtbl->set_current_event)
         prev_event = target_vtbl->set_current_event(&event_target->dispex, event_obj ? &event_obj->IHTMLEventObj_iface : NULL);
 
+    if(event_obj) {
+        event_obj->target = event_target;
+        IDispatchEx_AddRef(&event_target->dispex.IDispatchEx_iface);
+    }
+
     for(i = 0; i < chain_cnt; i++) {
         call_event_handlers(event_obj, target_chain[i], eid);
         if(!(event_info[eid].flags & EVENT_BUBBLES) || (event_obj && event_obj->cancel_bubble))
@@ -1156,7 +1158,7 @@ void fire_event(HTMLDocumentNode *doc, eventid_t eid, BOOL set_event, EventTarge
         if(!event_obj)
             return;
 
-        hres = set_event_info(event_obj, target, eid, doc, nsevent);
+        hres = set_event_info(event_obj, eid, doc, nsevent);
         if(FAILED(hres)) {
             IHTMLEventObj_Release(&event_obj->IHTMLEventObj_iface);
             return;
@@ -1206,7 +1208,7 @@ HRESULT dispatch_event(HTMLDOMNode *node, const WCHAR *event_name, VARIANT *even
     }
 
     if(event_obj) {
-        hres = set_event_info(event_obj, &node->event_target, eid, node->doc, NULL);
+        hres = set_event_info(event_obj, eid, node->doc, NULL);
         if(SUCCEEDED(hres))
             fire_event_obj(&node->event_target, eid, event_obj);
 
diff --git a/dlls/mshtml/tests/events.html b/dlls/mshtml/tests/events.html
index ffbd115..9e27491 100644
--- a/dlls/mshtml/tests/events.html
+++ b/dlls/mshtml/tests/events.html
@@ -176,6 +176,21 @@ function test_body_events() {
     ok(onclick_called, "onclick handler not invoked");
 }
 
+function test_event_target() {
+    var div = document.createElement("div");
+    document.body.appendChild(div);
+
+    var last_event_arg;
+    div.attachEvent("onclick", function(event_arg) {
+        ok(event_arg.srcElement === div, "srcElement != div");
+        last_event_arg = event_arg;
+    });
+
+    div.click();
+    with(todo_wine)
+    ok(last_event_arg.srcElement === null, "srcElement != null");
+}
+
 window.onload = function() {
     try {
         ok(inlscr_complete_called, "onreadystatechange not fired");
@@ -198,6 +213,7 @@ window.onload = function() {
         test_insert_script();
         test_string_event_handler();
         test_body_events();
+        test_event_target();
     }catch(e) {
         ok(false, "Got an exception: " + e.message);
     }




More information about the wine-cvs mailing list