diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2015-08-01 17:22:39 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2015-08-01 17:22:39 +0100 |
commit | 419b9a774b533462d9fa59e8733425a7e33c3efc (patch) | |
tree | fbb0b8873055e5db5fdb79ec0415fcdbe1b71edd /src | |
parent | 32efbef928f239b1dc35d1ecd6a0baed1893291e (diff) | |
download | libdom-419b9a774b533462d9fa59e8733425a7e33c3efc.tar.gz libdom-419b9a774b533462d9fa59e8733425a7e33c3efc.tar.bz2 |
Fix removal of event listeners.
Diffstat (limited to 'src')
-rw-r--r-- | src/events/event_target.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/events/event_target.c b/src/events/event_target.c index 6df683d..cb4e25b 100644 --- a/src/events/event_target.c +++ b/src/events/event_target.c @@ -109,6 +109,13 @@ dom_exception _dom_event_target_remove_event_listener( if (dom_string_isequal(le->type, type) && le->listener == listener && le->capture == capture) { + if (le->list.next == &le->list) { + eti->listeners = NULL; + } else { + eti->listeners = + (struct listener_entry *) + le->list.next; + } list_del(&le->list); dom_event_listener_unref(le->listener); dom_string_unref(le->type); @@ -117,7 +124,7 @@ dom_exception _dom_event_target_remove_event_listener( } le = (struct listener_entry *) le->list.next; - } while (le != eti->listeners); + } while (eti->listeners != NULL && le != eti->listeners); } return DOM_NO_ERR; |