Gitweb links:

...log 
http://git.netsurf-browser.org/libdom.git/shortlog/4e9b50f5b200918088bc6b1136751ea81cd8984b
...commit 
http://git.netsurf-browser.org/libdom.git/commit/4e9b50f5b200918088bc6b1136751ea81cd8984b
...tree 
http://git.netsurf-browser.org/libdom.git/tree/4e9b50f5b200918088bc6b1136751ea81cd8984b

The branch, master has been updated
       via  4e9b50f5b200918088bc6b1136751ea81cd8984b (commit)
      from  51ab1cdf25e80490023577c82cc35b68335eff5e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commitdiff 
http://git.netsurf-browser.org/libdom.git/commit/?id=4e9b50f5b200918088bc6b1136751ea81cd8984b
commit 4e9b50f5b200918088bc6b1136751ea81cd8984b
Author: Daniel Silverstone <[email protected]>
Commit: Daniel Silverstone <[email protected]>

    Unregister all instances of a listener
    
    Sometimes we register a listener a lot on an event target.  This change 
allows
    us to pass NULL as the event type to the remove call in order to remove 
every
    instance of the given listener, regardless of event type and capture vs.
    bubble.

diff --git a/src/events/event_target.c b/src/events/event_target.c
index ef2dc83..4592fee 100644
--- a/src/events/event_target.c
+++ b/src/events/event_target.c
@@ -99,6 +99,9 @@ dom_exception _dom_event_target_add_event_listener(
 /**
  * Remove an EventListener from the EventTarget
  *
+ * (LibDOM extension: If type is NULL, remove all listener registrations
+ * regardless of type and cature)
+ *
  * \param et        The EventTarget object
  * \param type      The event type this listener is registered for 
  * \param listener  The listener object
@@ -114,9 +117,15 @@ dom_exception _dom_event_target_remove_event_listener(
                struct listener_entry *le = eti->listeners;
 
                do {
-                       if (dom_string_isequal(le->type, type) &&
-                                       le->listener == listener &&
-                                       le->capture == capture) {
+                       bool matches;
+                       if (type == NULL) {
+                               matches = (le->listener == listener);
+                       } else {
+                               matches = dom_string_isequal(le->type, type) &&
+                                       (le->listener == listener) &&
+                                       (le->capture == capture);
+                       }
+                       if (matches) {
                                if (le->list.next == &le->list) {
                                        eti->listeners = NULL;
                                } else {


-----------------------------------------------------------------------

Summary of changes:
 src/events/event_target.c |   15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/events/event_target.c b/src/events/event_target.c
index ef2dc83..4592fee 100644
--- a/src/events/event_target.c
+++ b/src/events/event_target.c
@@ -99,6 +99,9 @@ dom_exception _dom_event_target_add_event_listener(
 /**
  * Remove an EventListener from the EventTarget
  *
+ * (LibDOM extension: If type is NULL, remove all listener registrations
+ * regardless of type and cature)
+ *
  * \param et        The EventTarget object
  * \param type      The event type this listener is registered for 
  * \param listener  The listener object
@@ -114,9 +117,15 @@ dom_exception _dom_event_target_remove_event_listener(
                struct listener_entry *le = eti->listeners;
 
                do {
-                       if (dom_string_isequal(le->type, type) &&
-                                       le->listener == listener &&
-                                       le->capture == capture) {
+                       bool matches;
+                       if (type == NULL) {
+                               matches = (le->listener == listener);
+                       } else {
+                               matches = dom_string_isequal(le->type, type) &&
+                                       (le->listener == listener) &&
+                                       (le->capture == capture);
+                       }
+                       if (matches) {
                                if (le->list.next == &le->list) {
                                        eti->listeners = NULL;
                                } else {


-- 
Document Object Model library

_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to