summaryrefslogtreecommitdiff
path: root/include/dom/events
diff options
context:
space:
mode:
Diffstat (limited to 'include/dom/events')
-rw-r--r--include/dom/events/document_event.h3
-rw-r--r--include/dom/events/event_target.h87
2 files changed, 69 insertions, 21 deletions
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))