summaryrefslogtreecommitdiff
path: root/include/dom/events/event_target.h
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2011-12-21 22:18:10 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2011-12-21 22:18:10 +0000
commit83f3338663c4969eebefd8c2c43bd3fc43587fdd (patch)
treee48ba69628c5ba793533094e308c1fce9acb21aa /include/dom/events/event_target.h
parent4ade8ad1c7b23e6eeeee6681acbdb43fb10cab43 (diff)
downloadlibdom-83f3338663c4969eebefd8c2c43bd3fc43587fdd.tar.gz
libdom-83f3338663c4969eebefd8c2c43bd3fc43587fdd.tar.bz2
Merge branches/jmb/dom-alloc-purge back to trunk
svn path=/trunk/libdom/; revision=13316
Diffstat (limited to 'include/dom/events/event_target.h')
-rw-r--r--include/dom/events/event_target.h87
1 files changed, 68 insertions, 19 deletions
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))