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>
This commit is contained in:
parent
62c7dd0576
commit
ec5d0d44ba
|
@ -5048,6 +5048,7 @@ static const event_target_vtbl_t HTMLDocumentNode_event_target_vtbl = {
|
|||
NULL
|
||||
},
|
||||
HTMLDocumentNode_bind_event,
|
||||
NULL,
|
||||
HTMLDocumentNode_get_cp_container
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue