void init_nsevents(NSContainer *This) { nsIDOMWindow *dom_window; nsIDOMEventTarget *target; nsresult nsres; static const PRUnichar wsz_blur[] = {'b','l','u','r',0}; static const PRUnichar wsz_focus[] = {'f','o','c','u','s',0}; static const PRUnichar wsz_keypress[] = {'k','e','y','p','r','e','s','s',0}; static const PRUnichar wsz_load[] = {'l','o','a','d',0}; static const PRUnichar DOMNodeInsertedW[] = {'D','O','M','N','o','d','e','I','n','s','e','r','t','e','d',0}; init_listener(&This->blur_listener, This, &blur_vtbl); init_listener(&This->focus_listener, This, &focus_vtbl); init_listener(&This->keypress_listener, This, &keypress_vtbl); init_listener(&This->load_listener, This, &load_vtbl); init_listener(&This->node_insert_listener, This, &node_insert_vtbl); init_listener(&This->htmlevent_listener, This, &htmlevent_vtbl); nsres = nsIWebBrowser_GetContentDOMWindow(This->webbrowser, &dom_window); if(NS_FAILED(nsres)) { ERR("GetContentDOMWindow failed: %08x\n", nsres); return; } nsres = nsIDOMWindow_QueryInterface(dom_window, &IID_nsIDOMEventTarget, (void**)&target); nsIDOMWindow_Release(dom_window); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMEventTarget interface: %08x\n", nsres); return; } init_event(target, wsz_blur, NSEVENTLIST(&This->blur_listener), TRUE); init_event(target, wsz_focus, NSEVENTLIST(&This->focus_listener), TRUE); init_event(target, wsz_keypress, NSEVENTLIST(&This->keypress_listener), FALSE); init_event(target, wsz_load, NSEVENTLIST(&This->load_listener), TRUE); init_event(target, DOMNodeInsertedW,NSEVENTLIST(&This->node_insert_listener),TRUE); nsIDOMEventTarget_Release(target); }
void init_nsevents(HTMLDocumentNode *doc) { nsDocumentEventListener *listener; nsIDOMEventTarget *target; nsresult nsres; static const PRUnichar wsz_blur[] = {'b','l','u','r',0}; static const PRUnichar wsz_focus[] = {'f','o','c','u','s',0}; static const PRUnichar wsz_keypress[] = {'k','e','y','p','r','e','s','s',0}; static const PRUnichar wsz_load[] = {'l','o','a','d',0}; listener = heap_alloc(sizeof(nsDocumentEventListener)); if(!listener) return; listener->ref = 1; listener->doc = doc; init_listener(&listener->blur_listener, listener, &blur_vtbl); init_listener(&listener->focus_listener, listener, &focus_vtbl); init_listener(&listener->keypress_listener, listener, &keypress_vtbl); init_listener(&listener->load_listener, listener, &load_vtbl); init_listener(&listener->htmlevent_listener, listener, &htmlevent_vtbl); doc->nsevent_listener = listener; nsres = nsIDOMWindow_QueryInterface(doc->basedoc.window->nswindow, &IID_nsIDOMEventTarget, (void**)&target); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMEventTarget interface: %08x\n", nsres); return; } init_event(target, wsz_blur, NSEVENTLIST(&listener->blur_listener), TRUE); init_event(target, wsz_focus, NSEVENTLIST(&listener->focus_listener), TRUE); init_event(target, wsz_keypress, NSEVENTLIST(&listener->keypress_listener), FALSE); init_event(target, wsz_load, NSEVENTLIST(&listener->load_listener), TRUE); nsIDOMEventTarget_Release(target); }
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; }
void add_nsevent_listener(HTMLDocumentNode *doc, nsIDOMNode *nsnode, LPCWSTR type) { nsIDOMEventTarget *target; nsresult nsres; if(nsnode) nsres = nsIDOMNode_QueryInterface(nsnode, &IID_nsIDOMEventTarget, (void**)&target); else nsres = nsIDOMWindow_QueryInterface(doc->basedoc.window->nswindow, &IID_nsIDOMEventTarget, (void**)&target); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMEventTarget interface: %08x\n", nsres); return; } init_event(target, type, NSEVENTLIST(&doc->nsevent_listener->htmlevent_listener), TRUE); nsIDOMEventTarget_Release(target); }
void add_nsevent_listener(NSContainer *container, LPCWSTR type) { nsIDOMWindow *dom_window; nsIDOMEventTarget *target; nsresult nsres; nsres = nsIWebBrowser_GetContentDOMWindow(container->webbrowser, &dom_window); if(NS_FAILED(nsres)) { ERR("GetContentDOMWindow failed: %08x\n", nsres); return; } nsres = nsIDOMWindow_QueryInterface(dom_window, &IID_nsIDOMEventTarget, (void**)&target); nsIDOMWindow_Release(dom_window); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMEventTarget interface: %08x\n", nsres); return; } init_event(target, type, NSEVENTLIST(&container->htmlevent_listener), TRUE); nsIDOMEventTarget_Release(target); }