소스 검색

LibWeb: Add EventTarget.removeEventListener()

Andreas Kling 5 년 전
부모
커밋
244b243d22
3개의 변경된 파일9개의 추가작업 그리고 0개의 파일을 삭제
  1. 7 0
      Libraries/LibWeb/DOM/EventTarget.cpp
  2. 1 0
      Libraries/LibWeb/DOM/EventTarget.h
  3. 1 0
      Libraries/LibWeb/DOM/EventTarget.idl

+ 7 - 0
Libraries/LibWeb/DOM/EventTarget.cpp

@@ -42,4 +42,11 @@ void EventTarget::add_event_listener(const FlyString& event_name, NonnullRefPtr<
     m_listeners.append({ event_name, move(listener) });
     m_listeners.append({ event_name, move(listener) });
 }
 }
 
 
+void EventTarget::remove_event_listener(const FlyString& event_name, NonnullRefPtr<EventListener> listener)
+{
+    m_listeners.remove_first_matching([&](auto& entry) {
+        return entry.event_name == event_name && &entry.listener->function() == &listener->function();
+    });
+}
+
 }
 }

+ 1 - 0
Libraries/LibWeb/DOM/EventTarget.h

@@ -44,6 +44,7 @@ public:
     void unref() { unref_event_target(); }
     void unref() { unref_event_target(); }
 
 
     void add_event_listener(const FlyString& event_name, NonnullRefPtr<EventListener>);
     void add_event_listener(const FlyString& event_name, NonnullRefPtr<EventListener>);
+    void remove_event_listener(const FlyString& event_name, NonnullRefPtr<EventListener>);
 
 
     virtual void dispatch_event(NonnullRefPtr<Event>) = 0;
     virtual void dispatch_event(NonnullRefPtr<Event>) = 0;
 
 

+ 1 - 0
Libraries/LibWeb/DOM/EventTarget.idl

@@ -1,5 +1,6 @@
 interface EventTarget {
 interface EventTarget {
 
 
     void addEventListener(DOMString type, EventListener? callback);
     void addEventListener(DOMString type, EventListener? callback);
+    void removeEventListener(DOMString type, EventListener? callback);
 
 
 }
 }