mshtml: Added support for document events in fire_event.
This commit is contained in:
parent
dfc27cd720
commit
603d8ed926
@ -739,20 +739,19 @@ void fire_event(HTMLDocument *doc, eventid_t eid, nsIDOMNode *target, nsIDOMEven
|
|||||||
HTMLDOMNode *node;
|
HTMLDOMNode *node;
|
||||||
PRUint16 node_type;
|
PRUint16 node_type;
|
||||||
|
|
||||||
nsIDOMNode_GetNodeType(target, &node_type);
|
TRACE("(%p) %s\n", doc, debugstr_w(event_info[eid].name));
|
||||||
if(node_type != ELEMENT_NODE) {
|
|
||||||
FIXME("node type %d node supported\n", node_type);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
prev_event = doc->window->event;
|
prev_event = doc->window->event;
|
||||||
event_obj = doc->window->event = create_event(get_node(doc, target, TRUE), eid, nsevent);
|
event_obj = doc->window->event = create_event(get_node(doc, target, TRUE), eid, nsevent);
|
||||||
|
|
||||||
|
nsIDOMNode_GetNodeType(target, &node_type);
|
||||||
nsnode = target;
|
nsnode = target;
|
||||||
nsIDOMNode_AddRef(nsnode);
|
nsIDOMNode_AddRef(nsnode);
|
||||||
|
|
||||||
while(1) {
|
switch(node_type) {
|
||||||
|
case ELEMENT_NODE:
|
||||||
|
do {
|
||||||
node = get_node(doc, nsnode, FALSE);
|
node = get_node(doc, nsnode, FALSE);
|
||||||
|
|
||||||
if(node)
|
if(node)
|
||||||
call_event_handlers(doc, event_obj, *get_node_event_target(node), eid, (IDispatch*)HTMLDOMNODE(node));
|
call_event_handlers(doc, event_obj, *get_node_event_target(node), eid, (IDispatch*)HTMLDOMNODE(node));
|
||||||
|
|
||||||
@ -766,16 +765,22 @@ void fire_event(HTMLDocument *doc, eventid_t eid, nsIDOMNode *target, nsIDOMEven
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
nsIDOMNode_GetNodeType(nsnode, &node_type);
|
nsIDOMNode_GetNodeType(nsnode, &node_type);
|
||||||
if(node_type != ELEMENT_NODE)
|
}while(node_type == ELEMENT_NODE);
|
||||||
|
|
||||||
|
if(!(event_info[eid].flags & EVENT_BUBBLE))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case DOCUMENT_NODE:
|
||||||
|
call_event_handlers(doc, event_obj, doc->event_target, eid, (IDispatch*)HTMLDOC(doc));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
FIXME("unimplemented node type %d\n", node_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(nsnode)
|
if(nsnode)
|
||||||
nsIDOMNode_Release(nsnode);
|
nsIDOMNode_Release(nsnode);
|
||||||
|
|
||||||
if(event_info[eid].flags & EVENT_BUBBLE)
|
|
||||||
call_event_handlers(doc, event_obj, doc->event_target, eid, (IDispatch*)HTMLDOC(doc));
|
|
||||||
|
|
||||||
IHTMLEventObj_Release(event_obj);
|
IHTMLEventObj_Release(event_obj);
|
||||||
doc->window->event = prev_event;
|
doc->window->event = prev_event;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user