static nsrefcnt NSAPI nsDOMEventListener_AddRef(nsIDOMEventListener *iface) { nsEventListener *This = impl_from_nsIDOMEventListener(iface); LONG ref = InterlockedIncrement(&This->This->ref); TRACE("(%p) ref=%d\n", This->This, ref); return ref; }
static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event) { nsEventListener *This = impl_from_nsIDOMEventListener(iface); HTMLDocumentNode *doc = This->This->doc; HTMLDocumentObj *doc_obj = NULL; nsresult nsres = NS_OK; TRACE("(%p)\n", doc); if(!doc || !doc->basedoc.window) return NS_ERROR_FAILURE; if(doc->basedoc.doc_obj && doc->basedoc.doc_obj->basedoc.doc_node == doc) doc_obj = doc->basedoc.doc_obj; connect_scripts(doc->window); htmldoc_addref(&doc->basedoc); if(doc_obj) handle_docobj_load(doc_obj); set_ready_state(doc->basedoc.window, READYSTATE_COMPLETE); if(doc_obj) { if(doc_obj->view_sink) IAdviseSink_OnViewChange(doc_obj->view_sink, DVASPECT_CONTENT, -1); set_statustext(doc_obj, IDS_STATUS_DONE, NULL); update_title(doc_obj); } if(doc_obj && doc_obj->usermode!=EDITMODE && doc_obj->doc_object_service && !(doc->basedoc.window->load_flags & BINDING_REFRESH)) IDocObjectService_FireDocumentComplete(doc_obj->doc_object_service, &doc->basedoc.window->base.IHTMLWindow2_iface, 0); if(doc->nsdoc) { nsIDOMHTMLElement *nsbody; flush_pending_tasks(doc->basedoc.task_magic); nsres = nsIDOMHTMLDocument_GetBody(doc->nsdoc, &nsbody); if(NS_SUCCEEDED(nsres) && nsbody) { fire_event(doc, EVENTID_LOAD, TRUE, (nsIDOMNode*)nsbody, event, (IDispatch*)&doc->window->base.IDispatchEx_iface); nsIDOMHTMLElement_Release(nsbody); } }else { ERR("NULL nsdoc\n"); nsres = NS_ERROR_FAILURE; } htmldoc_release(&doc->basedoc); return nsres; }
static nsresult NSAPI XMLHttpReqEventListener_HandleEvent(nsIDOMEventListener *iface, nsIDOMEvent *event) { XMLHttpReqEventListener *This = impl_from_nsIDOMEventListener(iface); TRACE("(%p)\n", This); if(!This->xhr) return NS_OK; call_event_handlers(NULL, NULL, &This->xhr->event_target, NULL, EVENTID_READYSTATECHANGE, (IDispatch*)&This->xhr->IHTMLXMLHttpRequest_iface); return NS_OK; }
static nsrefcnt NSAPI XMLHttpReqEventListener_Release(nsIDOMEventListener *iface) { XMLHttpReqEventListener *This = impl_from_nsIDOMEventListener(iface); LONG ref = InterlockedDecrement(&This->ref); TRACE("(%p) ref=%d\n", This, ref); if(!ref) { assert(!This->xhr); heap_free(This); } return ref; }
static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event) { nsEventListener *This = impl_from_nsIDOMEventListener(iface); HTMLDocumentNode *doc = This->This->doc; nsIDOMHTMLElement *nsbody = NULL; HTMLDocumentObj *doc_obj = NULL; TRACE("(%p)\n", doc); if(!doc || !doc->basedoc.window) return NS_ERROR_FAILURE; if(doc->basedoc.doc_obj && doc->basedoc.doc_obj->basedoc.doc_node == doc) doc_obj = doc->basedoc.doc_obj; connect_scripts(doc->basedoc.window); if(doc_obj) handle_docobj_load(doc_obj); set_ready_state(doc->basedoc.window, READYSTATE_COMPLETE); if(doc_obj) { if(doc_obj->view_sink) IAdviseSink_OnViewChange(doc_obj->view_sink, DVASPECT_CONTENT, -1); set_statustext(doc_obj, IDS_STATUS_DONE, NULL); update_title(doc_obj); } if(doc_obj && doc_obj->doc_object_service) IDocObjectService_FireDocumentComplete(doc_obj->doc_object_service, &doc->basedoc.window->IHTMLWindow2_iface, 0); if(!doc->nsdoc) { ERR("NULL nsdoc\n"); return NS_ERROR_FAILURE; } nsIDOMHTMLDocument_GetBody(doc->nsdoc, &nsbody); if(nsbody) { fire_event(doc, EVENTID_LOAD, TRUE, (nsIDOMNode*)nsbody, event); nsIDOMHTMLElement_Release(nsbody); } return NS_OK; }
static nsresult NSAPI handle_htmlevent(nsIDOMEventListener *iface, nsIDOMEvent *event) { nsEventListener *This = impl_from_nsIDOMEventListener(iface); HTMLDocumentNode *doc = This->This->doc; const PRUnichar *type; nsIDOMEventTarget *event_target; nsIDOMNode *nsnode; nsAString type_str; eventid_t eid; nsresult nsres; TRACE("%p\n", This->This); if(!doc) { WARN("NULL doc\n"); return NS_OK; } nsAString_Init(&type_str, NULL); nsIDOMEvent_GetType(event, &type_str); nsAString_GetData(&type_str, &type); eid = str_to_eid(type); nsAString_Finish(&type_str); nsres = nsIDOMEvent_GetTarget(event, &event_target); if(NS_FAILED(nsres) || !event_target) { ERR("GetEventTarget failed: %08x\n", nsres); return NS_OK; } nsres = nsIDOMEventTarget_QueryInterface(event_target, &IID_nsIDOMNode, (void**)&nsnode); nsIDOMEventTarget_Release(event_target); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMNode: %08x\n", nsres); return NS_OK; } fire_event(doc, eid, TRUE, nsnode, event, NULL); nsIDOMNode_Release(nsnode); return NS_OK; }
static nsresult NSAPI handle_keypress(nsIDOMEventListener *iface, nsIDOMEvent *event) { nsEventListener *This = impl_from_nsIDOMEventListener(iface); HTMLDocumentNode *doc = This->This->doc; HTMLDocumentObj *doc_obj; if(!doc) return NS_ERROR_FAILURE; doc_obj = doc->basedoc.doc_obj; TRACE("(%p)->(%p)\n", doc, event); update_doc(&doc_obj->basedoc, UPDATE_UI); if(doc_obj->usermode == EDITMODE) handle_edit_event(&doc_obj->basedoc, event); return NS_OK; }
static nsresult NSAPI handle_focus(nsIDOMEventListener *iface, nsIDOMEvent *event) { nsEventListener *This = impl_from_nsIDOMEventListener(iface); HTMLDocumentNode *doc = This->This->doc; HTMLDocumentObj *doc_obj; TRACE("(%p)\n", doc); if(!doc) return NS_ERROR_FAILURE; doc_obj = doc->basedoc.doc_obj; if(!doc_obj->focus) { doc_obj->focus = TRUE; notif_focus(doc_obj); } return NS_OK; }
static nsresult NSAPI handle_blur(nsIDOMEventListener *iface, nsIDOMEvent *event) { nsEventListener *This = impl_from_nsIDOMEventListener(iface); HTMLDocumentNode *doc = This->This->doc; HTMLDocumentObj *doc_obj; TRACE("(%p)\n", doc); if(!doc || !doc->basedoc.doc_obj) return NS_ERROR_FAILURE; doc_obj = doc->basedoc.doc_obj; if(doc_obj->focus && !is_doc_child_focus(doc_obj->nscontainer)) { doc_obj->focus = FALSE; notif_focus(doc_obj); } return NS_OK; }
static nsresult NSAPI XMLHttpReqEventListener_QueryInterface(nsIDOMEventListener *iface, nsIIDRef riid, void **result) { XMLHttpReqEventListener *This = impl_from_nsIDOMEventListener(iface); if(IsEqualGUID(&IID_nsISupports, riid)) { TRACE("(%p)->(IID_nsISupports, %p)\n", This, result); *result = &This->nsIDOMEventListener_iface; }else if(IsEqualGUID(&IID_nsIDOMEventListener, riid)) { TRACE("(%p)->(IID_nsIDOMEventListener %p)\n", This, result); *result = &This->nsIDOMEventListener_iface; }else { *result = NULL; TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), result); return NS_NOINTERFACE; } nsIDOMEventListener_AddRef(&This->nsIDOMEventListener_iface); return NS_OK; }
static nsrefcnt NSAPI nsDOMEventListener_Release(nsIDOMEventListener *iface) { nsEventListener *This = impl_from_nsIDOMEventListener(iface); return release_listener(This->This); }