Module: wine Branch: master Commit: ec5d0d44baa122b451a823f28c2b21cb34f2e462 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ec5d0d44baa122b451a823f28c...
Author: Jacek Caban jacek@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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;