1 /* 2 * Copyright 2008 Jacek Caban for CodeWeavers 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19 #pragma once 20 21 typedef enum { 22 EVENTID_ABORT, 23 EVENTID_BEFOREUNLOAD, 24 EVENTID_BLUR, 25 EVENTID_CHANGE, 26 EVENTID_CLICK, 27 EVENTID_CONTEXTMENU, 28 EVENTID_DATAAVAILABLE, 29 EVENTID_DBLCLICK, 30 EVENTID_DRAG, 31 EVENTID_DRAGSTART, 32 EVENTID_ERROR, 33 EVENTID_FOCUS, 34 EVENTID_FOCUSIN, 35 EVENTID_HELP, 36 EVENTID_KEYDOWN, 37 EVENTID_KEYPRESS, 38 EVENTID_KEYUP, 39 EVENTID_LOAD, 40 EVENTID_MOUSEDOWN, 41 EVENTID_MOUSEMOVE, 42 EVENTID_MOUSEOUT, 43 EVENTID_MOUSEOVER, 44 EVENTID_MOUSEUP, 45 EVENTID_MOUSEWHEEL, 46 EVENTID_PASTE, 47 EVENTID_READYSTATECHANGE, 48 EVENTID_RESIZE, 49 EVENTID_SCROLL, 50 EVENTID_SELECTSTART, 51 EVENTID_SUBMIT, 52 EVENTID_LAST 53 } eventid_t; 54 55 eventid_t str_to_eid(LPCWSTR) DECLSPEC_HIDDEN; 56 void check_event_attr(HTMLDocumentNode*,nsIDOMHTMLElement*) DECLSPEC_HIDDEN; 57 void release_event_target(event_target_t*) DECLSPEC_HIDDEN; 58 void fire_event(HTMLDocumentNode*,eventid_t,BOOL,nsIDOMNode*,nsIDOMEvent*,IDispatch*) DECLSPEC_HIDDEN; 59 HRESULT set_event_handler(EventTarget*,eventid_t,VARIANT*) DECLSPEC_HIDDEN; 60 HRESULT get_event_handler(EventTarget*,eventid_t,VARIANT*) DECLSPEC_HIDDEN; 61 HRESULT attach_event(EventTarget*,BSTR,IDispatch*,VARIANT_BOOL*) DECLSPEC_HIDDEN; 62 HRESULT detach_event(EventTarget*,BSTR,IDispatch*) DECLSPEC_HIDDEN; 63 HRESULT dispatch_event(HTMLDOMNode*,const WCHAR*,VARIANT*,VARIANT_BOOL*) DECLSPEC_HIDDEN; 64 HRESULT call_fire_event(HTMLDOMNode*,eventid_t) DECLSPEC_HIDDEN; 65 void update_doc_cp_events(HTMLDocumentNode*,cp_static_data_t*) DECLSPEC_HIDDEN; 66 HRESULT doc_init_events(HTMLDocumentNode*) DECLSPEC_HIDDEN; 67 void detach_events(HTMLDocumentNode *doc) DECLSPEC_HIDDEN; 68 HRESULT create_event_obj(IHTMLEventObj**) DECLSPEC_HIDDEN; 69 void bind_target_event(HTMLDocumentNode*,EventTarget*,const WCHAR*,IDispatch*) DECLSPEC_HIDDEN; 70 HRESULT ensure_doc_nsevent_handler(HTMLDocumentNode*,eventid_t) DECLSPEC_HIDDEN; 71 72 typedef struct HTMLEventObj HTMLEventObj; 73 void call_event_handlers(HTMLDocumentNode*,HTMLEventObj*,EventTarget*,ConnectionPointContainer*,eventid_t,IDispatch*); 74 75 void init_nsevents(HTMLDocumentNode*) DECLSPEC_HIDDEN; 76 void release_nsevents(HTMLDocumentNode*) DECLSPEC_HIDDEN; 77 void add_nsevent_listener(HTMLDocumentNode*,nsIDOMNode*,LPCWSTR) DECLSPEC_HIDDEN; 78 void detach_nsevent(HTMLDocumentNode*,const WCHAR*) DECLSPEC_HIDDEN; 79 80 static inline HRESULT set_node_event(HTMLDOMNode *node, eventid_t eid, VARIANT *var) 81 { 82 return set_event_handler(&node->event_target, eid, var); 83 } 84 85 static inline HRESULT get_node_event(HTMLDOMNode *node, eventid_t eid, VARIANT *var) 86 { 87 return get_event_handler(&node->event_target, eid, var); 88 } 89 90 static inline HRESULT set_doc_event(HTMLDocument *doc, eventid_t eid, VARIANT *var) 91 { 92 return set_node_event(&doc->doc_node->node, eid, var); 93 } 94 95 static inline HRESULT get_doc_event(HTMLDocument *doc, eventid_t eid, VARIANT *var) 96 { 97 return get_node_event(&doc->doc_node->node, eid, var); 98 } 99