static HRESULT ensure_nsevent_handler(HTMLDocumentNode *doc, event_target_t *event_target, nsIDOMNode *nsnode, eventid_t eid) { if(!doc->nsdoc) return S_OK; if(event_info[eid].flags & EVENT_NODEHANDLER) { DWORD mask; mask = get_node_handler_mask(eid); if(event_target->node_handlers_mask & mask) return S_OK; add_nsevent_listener(doc, nsnode, event_info[eid].name); event_target->node_handlers_mask |= mask; return S_OK; } if(!(event_info[eid].flags & EVENT_DEFAULTLISTENER)) return S_OK; if(!doc->event_vector[eid]) { doc->event_vector[eid] = TRUE; add_nsevent_listener(doc, NULL, event_info[eid].name); } return S_OK; }
static HRESULT ensure_nsevent_handler(HTMLDocumentNode *doc, event_target_t *event_target, eventid_t eid) { nsIDOMNode *nsnode = NULL; TRACE("%s\n", debugstr_w(event_info[eid].name)); if(!doc->nsdoc || doc->event_vector[eid] || !(event_info[eid].flags & (EVENT_DEFAULTLISTENER|EVENT_BIND_TO_BODY))) return S_OK; if(event_info[eid].flags & EVENT_BIND_TO_BODY) { nsIDOMHTMLElement *nsbody; nsresult nsres; nsres = nsIDOMHTMLDocument_GetBody(doc->nsdoc, &nsbody); if(NS_SUCCEEDED(nsres) && nsbody) { nsnode = (nsIDOMNode*)nsbody; }else { ERR("GetBody failed: %08x\n", nsres); return E_UNEXPECTED; } } doc->event_vector[eid] = TRUE; add_nsevent_listener(doc, nsnode, event_info[eid].name); if(nsnode) nsIDOMNode_Release(nsnode); return S_OK; }
HRESULT ensure_doc_nsevent_handler(HTMLDocumentNode *doc, eventid_t eid) { nsIDOMNode *nsnode = NULL; TRACE("%s\n", debugstr_w(event_info[eid].name)); if(!doc->nsdoc || doc->event_vector[eid] || !(event_info[eid].flags & (EVENT_DEFAULTLISTENER|EVENT_BIND_TO_BODY))) return S_OK; if(event_info[eid].flags & EVENT_BIND_TO_BODY) { nsnode = doc->node.nsnode; nsIDOMNode_AddRef(nsnode); } doc->event_vector[eid] = TRUE; add_nsevent_listener(doc, nsnode, event_info[eid].name); if(nsnode) nsIDOMNode_Release(nsnode); return S_OK; }