static nsresult NSAPI handle_node_insert(nsIDOMEventListener *iface, nsIDOMEvent *event) { NSContainer *This = NSEVENTLIST_THIS(iface)->This; nsIDOMHTMLScriptElement *script; nsIDOMEventTarget *target; nsIDOMElement *elem; nsresult nsres; TRACE("(%p %p)\n", This, event); nsres = nsIDOMEvent_GetTarget(event, &target); if(NS_FAILED(nsres)) { ERR("GetTarget failed: %08x\n", nsres); return NS_OK; } nsres = nsIDOMEventTarget_QueryInterface(target, &IID_nsIDOMElement, (void**)&elem); nsIDOMEventTarget_Release(target); if(NS_FAILED(nsres)) return NS_OK; nsres = nsIDOMElement_QueryInterface(elem, &IID_nsIDOMHTMLScriptElement, (void**)&script); if(SUCCEEDED(nsres)) { doc_insert_script(This->doc, script); nsIDOMHTMLScriptElement_Release(script); } check_event_attr(This->doc, elem); nsIDOMNode_Release(elem); return NS_OK; }
static nsresult NSAPI handle_htmlevent(nsIDOMEventListener *iface, nsIDOMEvent *event) { NSContainer *This = NSEVENTLIST_THIS(iface)->This; const PRUnichar *type; nsIDOMEventTarget *event_target; nsIDOMNode *nsnode; nsAString type_str; eventid_t eid; nsresult nsres; 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(This->doc, eid, nsnode); nsIDOMNode_Release(nsnode); return NS_OK; }
static nsrefcnt NSAPI nsDOMEventListener_AddRef(nsIDOMEventListener *iface) { nsDocumentEventListener *This = NSEVENTLIST_THIS(iface)->This; LONG ref = InterlockedIncrement(&This->ref); TRACE("(%p) ref=%d\n", This, ref); return ref; }
static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event) { HTMLDocumentNode *doc = NSEVENTLIST_THIS(iface)->This->doc; HTMLDocumentObj *doc_obj; nsIDOMHTMLElement *nsbody = NULL; TRACE("(%p)\n", doc); if(!doc || !doc->basedoc.window) return NS_ERROR_FAILURE; doc_obj = doc->basedoc.doc_obj; connect_scripts(doc->basedoc.window); if(doc_obj->nscontainer->editor_controller) { nsIController_Release(doc_obj->nscontainer->editor_controller); doc_obj->nscontainer->editor_controller = NULL; } if(doc_obj->usermode == EDITMODE) handle_edit_load(&doc_obj->basedoc); if(doc == doc_obj->basedoc.doc_node) handle_docobj_load(doc_obj); set_ready_state(doc->basedoc.window, READYSTATE_COMPLETE); if(doc == doc_obj->basedoc.doc_node) { if(doc_obj->view_sink) IAdviseSink_OnViewChange(doc_obj->view_sink, DVASPECT_CONTENT, -1); if(doc_obj->frame) { static const WCHAR wszDone[] = {'D','o','n','e',0}; IOleInPlaceFrame_SetStatusText(doc_obj->frame, wszDone); } update_title(doc_obj); } 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_blur(nsIDOMEventListener *iface, nsIDOMEvent *event) { NSContainer *This = NSEVENTLIST_THIS(iface)->This; TRACE("(%p)\n", This); if(!This->reset_focus && This->doc && This->doc->focus && !is_doc_child_focus(This)) { This->doc->focus = FALSE; notif_focus(This->doc); } return NS_OK; }
static nsresult NSAPI handle_keypress(nsIDOMEventListener *iface, nsIDOMEvent *event) { NSContainer *This = NSEVENTLIST_THIS(iface)->This; TRACE("(%p)->(%p)\n", This, event); update_doc(This->doc, UPDATE_UI); if(This->doc->usermode == EDITMODE) handle_edit_event(This->doc, event); return NS_OK; }
static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event) { NSContainer *This = NSEVENTLIST_THIS(iface)->This; nsIDOMHTMLDocument *nshtmldoc; nsIDOMHTMLElement *nsbody = NULL; nsIDOMDocument *nsdoc; task_t *task; TRACE("(%p)\n", This); if(!This->doc) return NS_OK; connect_scripts(This->doc); setup_nswindow(This->doc->window); if(This->editor_controller) { nsIController_Release(This->editor_controller); This->editor_controller = NULL; } if(This->doc->usermode == EDITMODE) handle_edit_load(This->doc); task = heap_alloc(sizeof(task_t)); task->doc = This->doc; task->task_id = TASK_PARSECOMPLETE; task->next = NULL; /* * This should be done in the worker thread that parses HTML, * but we don't have such thread (Gecko parses HTML for us). */ push_task(task); nsIWebNavigation_GetDocument(This->navigation, &nsdoc); nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMHTMLDocument, (void**)&nshtmldoc); nsIDOMDocument_Release(nsdoc); nsIDOMHTMLDocument_GetBody(nshtmldoc, &nsbody); nsIDOMHTMLDocument_Release(nshtmldoc); if(nsbody) { fire_event(This->doc, EVENTID_LOAD, (nsIDOMNode*)nsbody); nsIDOMHTMLElement_Release(nsbody); } return NS_OK; }
static nsresult NSAPI handle_keypress(nsIDOMEventListener *iface, nsIDOMEvent *event) { HTMLDocumentNode *doc = NSEVENTLIST_THIS(iface)->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) { HTMLDocumentNode *doc = NSEVENTLIST_THIS(iface)->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) { HTMLDocumentNode *doc = NSEVENTLIST_THIS(iface)->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 handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event) { HTMLDocumentNode *doc = NSEVENTLIST_THIS(iface)->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->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 nsDOMEventListener_QueryInterface(nsIDOMEventListener *iface, nsIIDRef riid, nsQIResult result) { nsEventListener *This = NSEVENTLIST_THIS(iface); *result = NULL; if(IsEqualGUID(&IID_nsISupports, riid)) { TRACE("(%p)->(IID_nsISupports, %p)\n", This, result); *result = NSEVENTLIST(This); }else if(IsEqualGUID(&IID_nsIDOMEventListener, riid)) { TRACE("(%p)->(IID_nsIDOMEventListener %p)\n", This, result); *result = NSEVENTLIST(This); } if(*result) { nsIWebBrowserChrome_AddRef(NSEVENTLIST(This)); return NS_OK; } TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), result); return NS_NOINTERFACE; }
static nsrefcnt NSAPI nsDOMEventListener_Release(nsIDOMEventListener *iface) { NSContainer *This = NSEVENTLIST_THIS(iface)->This; return nsIWebBrowserChrome_Release(NSWBCHROME(This)); }
static nsrefcnt NSAPI nsDOMEventListener_Release(nsIDOMEventListener *iface) { nsDocumentEventListener *This = NSEVENTLIST_THIS(iface)->This; return release_listener(This); }