From 83f3338663c4969eebefd8c2c43bd3fc43587fdd Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Wed, 21 Dec 2011 22:18:10 +0000 Subject: Merge branches/jmb/dom-alloc-purge back to trunk svn path=/trunk/libdom/; revision=13316 --- include/dom/events/document_event.h | 3 +- include/dom/events/event_target.h | 87 +++++++++++++++++++++++++++++-------- 2 files changed, 69 insertions(+), 21 deletions(-) (limited to 'include/dom/events') diff --git a/include/dom/events/document_event.h b/include/dom/events/document_event.h index bbb9f83..7f61df7 100644 --- a/include/dom/events/document_event.h +++ b/include/dom/events/document_event.h @@ -15,7 +15,6 @@ struct dom_event; struct dom_document; -struct lwc_string_s; typedef struct dom_document dom_document_event; @@ -80,7 +79,7 @@ typedef enum { * \return a callback function, NULL if there is none. */ typedef dom_default_action_callback (*dom_events_default_action_fetcher) - (struct lwc_string_s *type, dom_default_action_phase phase, + (dom_string *type, dom_default_action_phase phase, void **pw); dom_exception _dom_document_event_create_event(dom_document_event *de, diff --git a/include/dom/events/event_target.h b/include/dom/events/event_target.h index 51226ed..e55b6cb 100644 --- a/include/dom/events/event_target.h +++ b/include/dom/events/event_target.h @@ -14,46 +14,95 @@ struct dom_event_listener; struct dom_event; -struct dom_node_internal; -typedef struct dom_node_internal dom_event_target; +/* Event target is a mixin interface, thus has no concrete implementation. + * Subclasses must provide implementations of the event target methods. */ +typedef struct dom_event_target { + void *vtable; +} dom_event_target; -dom_exception _dom_event_target_add_event_listener(dom_event_target *et, - dom_string *type, struct dom_event_listener *listener, - bool capture); +typedef struct dom_event_target_vtable { + dom_exception (*add_event_listener)( + dom_event_target *et, dom_string *type, + struct dom_event_listener *listener, + bool capture); + dom_exception (*remove_event_listener)( + dom_event_target *et, dom_string *type, + struct dom_event_listener *listener, + bool capture); + dom_exception (*dispatch_event)( + dom_event_target *et, + struct dom_event *evt, bool *success); + dom_exception (*add_event_listener_ns)( + dom_event_target *et, + dom_string *namespace, dom_string *type, + struct dom_event_listener *listener, + bool capture); + dom_exception (*remove_event_listener_ns)( + dom_event_target *et, + dom_string *namespace, dom_string *type, + struct dom_event_listener *listener, + bool capture); +} dom_event_target_vtable; + +static inline dom_exception dom_event_target_add_event_listener( + dom_event_target *et, dom_string *type, + struct dom_event_listener *listener, bool capture) +{ + return ((dom_event_target_vtable *) et->vtable)->add_event_listener( + et, type, listener, capture); +} #define dom_event_target_add_event_listener(et, t, l, c) \ - _dom_event_target_add_event_listener((dom_event_target *) (et),\ + dom_event_target_add_event_listener((dom_event_target *) (et),\ (dom_string *) (t), (struct dom_event_listener *) (l), \ (bool) (c)) -dom_exception _dom_event_target_remove_event_listener(dom_event_target *et, - dom_string *type, struct dom_event_listener *listener, - bool capture); +static inline dom_exception dom_event_target_remove_event_listener( + dom_event_target *et, dom_string *type, + struct dom_event_listener *listener, bool capture) +{ + return ((dom_event_target_vtable *) et->vtable)->remove_event_listener( + et, type, listener, capture); +} #define dom_event_target_remove_event_listener(et, t, l, c) \ - _dom_event_target_remove_event_listener(\ + dom_event_target_remove_event_listener(\ (dom_event_target *) (et), (dom_string *) (t),\ (struct dom_event_listener *) (l), (bool) (c)) -dom_exception _dom_event_target_dispatch_event(dom_event_target *et, - struct dom_event *evt, bool *success); +static inline dom_exception dom_event_target_dispatch_event( + dom_event_target *et, struct dom_event *evt, bool *success) +{ + return ((dom_event_target_vtable *) et->vtable)->dispatch_event( + et, evt, success); +} #define dom_event_target_dispatch_event(et, e, s) \ - _dom_event_target_dispatch_event((dom_event_target *) (et),\ + dom_event_target_dispatch_event((dom_event_target *) (et),\ (struct dom_event *) (e), (bool *) (s)) -dom_exception _dom_event_target_add_event_listener_ns(dom_event_target *et, +static inline dom_exception dom_event_target_add_event_listener_ns( + dom_event_target *et, dom_string *namespace, dom_string *type, - struct dom_event_listener *listener, bool capture); + struct dom_event_listener *listener, bool capture) +{ + return ((dom_event_target_vtable *) et->vtable)->add_event_listener_ns( + et, namespace, type, listener, capture); +} #define dom_event_target_add_event_listener_ns(et, n, t, l, c) \ - _dom_event_target_add_event_listener_ns(\ + dom_event_target_add_event_listener_ns(\ (dom_event_target *) (et), (dom_string *) (n),\ (dom_string *) (t), (struct dom_event_listener *) (l),\ (bool) (c)) -dom_exception _dom_event_target_remove_event_listener_ns(dom_event_target *et, +static inline dom_exception dom_event_target_remove_event_listener_ns( + dom_event_target *et, dom_string *namespace, dom_string *type, - struct dom_event_listener *listener, bool capture); + struct dom_event_listener *listener, bool capture) +{ + return ((dom_event_target_vtable *) et->vtable)->remove_event_listener_ns( + et, namespace, type, listener, capture); +} #define dom_event_target_remove_event_listener_ns(et, n, t, l, c) \ - _dom_event_target_remove_event_listener_ns(\ + dom_event_target_remove_event_listener_ns(\ (dom_event_target *) (et), (dom_string *) (n),\ (dom_string *) (t), (struct dom_event_listener *) (l),\ (bool) (c)) -- cgit v1.2.3