diff options
author | Bo Yang <struggleyb.nku@gmail.com> | 2009-08-13 09:33:24 +0000 |
---|---|---|
committer | Bo Yang <struggleyb.nku@gmail.com> | 2009-08-13 09:33:24 +0000 |
commit | 13fadb12fb400818e0ccb4c38b3bfce70ccfdad2 (patch) | |
tree | 19c55b39d97567a37b88b49aaaac13b21b9f24ee /src/events/event_target.h | |
parent | bf6bc398bd40e39a016725550f5b8446a01ee2d1 (diff) | |
download | libdom-13fadb12fb400818e0ccb4c38b3bfce70ccfdad2.tar.gz libdom-13fadb12fb400818e0ccb4c38b3bfce70ccfdad2.tar.bz2 |
Merge the Events module (branches/struggleyb/libdom-events) back to trunk. :)
svn path=/trunk/dom/; revision=9236
Diffstat (limited to 'src/events/event_target.h')
-rw-r--r-- | src/events/event_target.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/events/event_target.h b/src/events/event_target.h new file mode 100644 index 0000000..a92963e --- /dev/null +++ b/src/events/event_target.h @@ -0,0 +1,88 @@ +/* + * This file is part of libdom. + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com> + */ + +#ifndef dom_internal_events_event_target_h_ +#define dom_internal_events_event_target_h_ + +#include <dom/events/event.h> +#include <dom/events/mutation_event.h> +#include <dom/events/event_target.h> +#include <dom/events/event_listener.h> + +#include "utils/list.h" +#include "utils/hashtable.h" + +struct dom_document; +struct dom_string; + +/** + * Listener Entry + */ +struct listener_entry { + struct list_entry list; + /**< The listener list registered at the same + * EventTarget */ + dom_event_listener *listener; /**< The EventListener */ + bool capture; /**< Whether this listener is in capture phase */ +}; + +/** + * EventTarget internal class + */ +struct dom_event_target_internal { + struct dom_hash_table *listeners; + /**< The listeners of this EventTarget. + * The listeners are organized by the + * type of events they listen for + */ + struct dom_hash_table *ns_listeners; + /**< The listeners with namespace of thie EventTarget */ +}; + +typedef struct dom_event_target_internal dom_event_target_internal; + +/** + * Constructor and destructor: Since this object is not intended to be + * allocated alone, it should be embedded into the Node object, there is + * no constructor and destructor for it. + */ + +/* Initialise this EventTarget */ +dom_exception _dom_event_target_internal_initialise(struct dom_document *doc, + dom_event_target_internal *eti); + +/* Finalise this EventTarget */ +void _dom_event_target_internal_finalise(struct dom_document *doc, + dom_event_target_internal *eti); + +/* Dispatch the event on this node */ +dom_exception _dom_event_target_dispatch(dom_event_target *et, + struct dom_event *evt, dom_event_flow_phase phase, + bool *success); + +/* Dispatch a DOMNodeInserted/DOMNodeRemoved event */ +dom_exception _dom_dispatch_node_change_event(struct dom_document *doc, + dom_event_target *et, dom_event_target *related, + dom_mutation_type change, bool *success); + +/* Dispatch a DOMCharacterDataModified event */ +dom_exception _dom_dispatch_characterdata_modified_event( + struct dom_document *doc, dom_event_target *et, + struct dom_string *prev, struct dom_string *new, bool *success); + +/* Dispatch a DOMAttrModified event */ +dom_exception _dom_dispatch_attr_modified_event(struct dom_document *doc, + dom_event_target *et, struct dom_string *prev, + struct dom_string *new, dom_event_target *related, + struct dom_string *attr_name, dom_mutation_type change, + bool *success); + +/* Dispatch a DOMSubtreeModified event */ +dom_exception _dom_dispatch_subtree_modified_event(struct dom_document *doc, + dom_event_target *et, bool *success); + +#endif |