Jacek Caban : mshtml: Call default event handles through event target vtbl.

Alexandre Julliard julliard at winehq.org
Wed Oct 18 15:16:29 CDT 2017


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Oct 18 16:40:02 2017 +0200

mshtml: Call default event handles through event target vtbl.

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

---

 dlls/mshtml/htmldoc.c   |  1 +
 dlls/mshtml/htmlelem.c  | 10 ++++++++++
 dlls/mshtml/htmlevent.c |  5 +++--
 dlls/mshtml/htmlevent.h |  1 +
 4 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 540ede0..3ce044d 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -5048,6 +5048,7 @@ static const event_target_vtbl_t HTMLDocumentNode_event_target_vtbl = {
         NULL
     },
     HTMLDocumentNode_bind_event,
+    NULL,
     HTMLDocumentNode_get_cp_container
 };
 
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index 7a2c4fc..28f885f 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -5347,6 +5347,15 @@ static void HTMLElement_bind_event(DispatchEx *dispex, eventid_t eid)
     }
 }
 
+static HRESULT HTMLElement_handle_event_default(DispatchEx *dispex, eventid_t eid, nsIDOMEvent *nsevent, BOOL *prevent_default)
+{
+    HTMLElement *This = impl_from_DispatchEx(dispex);
+
+    if(!This->node.vtbl->handle_event)
+        return S_OK;
+    return This->node.vtbl->handle_event(&This->node, eid, nsevent, prevent_default);
+}
+
 static ConnectionPointContainer *HTMLElement_get_cp_container(DispatchEx *dispex)
 {
     HTMLElement *This = impl_from_DispatchEx(dispex);
@@ -5385,6 +5394,7 @@ static event_target_vtbl_t HTMLElement_event_target_vtbl = {
         HTMLElement_populate_props
     },
     HTMLElement_bind_event,
+    HTMLElement_handle_event_default,
     HTMLElement_get_cp_container
 };
 
diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index 4e25bf3..dedd311 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -1137,8 +1137,9 @@ static void fire_event_obj(HTMLDocumentNode *doc, eventid_t eid, HTMLEventObj *e
                 break;
 
             if(node) {
-                if(node->vtbl->handle_event)
-                    hres = node->vtbl->handle_event(node, eid, event_obj ? event_obj->nsevent : NULL, &prevent_default);
+                const event_target_vtbl_t *vtbl = dispex_get_vtbl(&node->event_target.dispex);
+                if(vtbl && vtbl->handle_event_default)
+                    hres = vtbl->handle_event_default(&node->event_target.dispex, eid, event_obj ? event_obj->nsevent : NULL, &prevent_default);
                 node_release(node);
                 if(FAILED(hres) || prevent_default || (event_obj && event_obj->cancel_bubble))
                     break;
diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h
index ebb8e4c..e4128f2 100644
--- a/dlls/mshtml/htmlevent.h
+++ b/dlls/mshtml/htmlevent.h
@@ -83,6 +83,7 @@ void detach_nsevent(HTMLDocumentNode*,const WCHAR*) DECLSPEC_HIDDEN;
 typedef struct {
     dispex_static_data_vtbl_t dispex_vtbl;
     void (*bind_event)(DispatchEx*,eventid_t);
+    HRESULT (*handle_event_default)(DispatchEx*,eventid_t,nsIDOMEvent*,BOOL*);
     ConnectionPointContainer *(*get_cp_container)(DispatchEx*);
 } event_target_vtbl_t;
 




More information about the wine-cvs mailing list