summaryrefslogtreecommitdiff
path: root/src/events
diff options
context:
space:
mode:
authorBo Yang <struggleyb.nku@gmail.com>2009-08-13 11:51:54 +0000
committerBo Yang <struggleyb.nku@gmail.com>2009-08-13 11:51:54 +0000
commitf7d7c296398ef6cee6025ff4d8484a74bca2d554 (patch)
treecf82ae5aa5e8ca0c459dab0deea6ed0a4034505d /src/events
parente02d9eb6661546a13b4caad8f1c03e38354ece3d (diff)
downloadlibdom-f7d7c296398ef6cee6025ff4d8484a74bca2d554.tar.gz
libdom-f7d7c296398ef6cee6025ff4d8484a74bca2d554.tar.bz2
1. Fix a string intern bug.
2. Reset the fields when finalise a dom_event. svn path=/trunk/dom/; revision=9247
Diffstat (limited to 'src/events')
-rw-r--r--src/events/event.c15
-rw-r--r--src/events/event_target.c5
-rw-r--r--src/events/mutation_event.c5
3 files changed, 21 insertions, 4 deletions
diff --git a/src/events/event.c b/src/events/event.c
index f9caa0b..9330edf 100644
--- a/src/events/event.c
+++ b/src/events/event.c
@@ -59,8 +59,6 @@ dom_exception _dom_event_initialise(struct dom_document *doc,
evt->namespace = NULL;
- evt->timestamp = time(NULL);
-
evt->refcnt = 1;
evt->in_dispatch = false;
@@ -78,6 +76,17 @@ void _dom_event_finalise(struct dom_document *doc, struct dom_event *evt)
lwc_context_string_unref(ctx, evt->type);
if (evt->namespace != NULL)
lwc_context_string_unref(ctx, evt->namespace);
+
+ evt->stop = false;
+ evt->stop_now = false;
+ evt->prevent_default = false;
+ evt->custom = false;
+
+ evt->type = NULL;
+
+ evt->namespace = NULL;
+
+ evt->in_dispatch = false;
}
/* The virtual destroy function */
@@ -253,6 +262,8 @@ dom_exception _dom_event_init(dom_event *evt, struct dom_string *type,
evt->bubble = bubble;
evt->cancelable = cancelable;
+ evt->timestamp = time(NULL);
+
return DOM_NO_ERR;
}
diff --git a/src/events/event_target.c b/src/events/event_target.c
index e17aa9c..69f4dd6 100644
--- a/src/events/event_target.c
+++ b/src/events/event_target.c
@@ -624,7 +624,8 @@ dom_exception _dom_dispatch_node_change_event(struct dom_document *doc,
if (err != DOM_NO_ERR)
goto cleanup;
- dom_event_target *target = et;
+ /* Dispatch the events for its children */
+ dom_event_target *target = et->first_child;
while (target != NULL) {
err = dom_mutation_event_init(evt, t, true, false, NULL,
NULL, NULL, NULL, change);
@@ -641,7 +642,7 @@ dom_exception _dom_dispatch_node_change_event(struct dom_document *doc,
} else if (target->next != NULL) {
target = target->next;
} else {
- while (p != et && target == p->first_child) {
+ while (p != et && target == p->last_child) {
target = p;
p = dom_node_get_parent(p);
}
diff --git a/src/events/mutation_event.c b/src/events/mutation_event.c
index ea7163c..c24ae15 100644
--- a/src/events/mutation_event.c
+++ b/src/events/mutation_event.c
@@ -56,6 +56,11 @@ void _dom_mutation_event_finalise(struct dom_document *doc,
dom_string_unref(evt->prev_value);
dom_string_unref(evt->new_value);
dom_string_unref(evt->attr_name);
+
+ evt->related_node = NULL;
+ evt->prev_value = NULL;
+ evt->new_value = NULL;
+ evt->attr_name = NULL;
_dom_event_finalise(doc, &evt->base);
}