diff --git a/Libraries/LibWeb/DOM/EventTarget.cpp b/Libraries/LibWeb/DOM/EventTarget.cpp index 1af0b18458b..4f543feb611 100644 --- a/Libraries/LibWeb/DOM/EventTarget.cpp +++ b/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) }); } +void EventTarget::remove_event_listener(const FlyString& event_name, NonnullRefPtr listener) +{ + m_listeners.remove_first_matching([&](auto& entry) { + return entry.event_name == event_name && &entry.listener->function() == &listener->function(); + }); +} + } diff --git a/Libraries/LibWeb/DOM/EventTarget.h b/Libraries/LibWeb/DOM/EventTarget.h index b322336b57c..17e421ec824 100644 --- a/Libraries/LibWeb/DOM/EventTarget.h +++ b/Libraries/LibWeb/DOM/EventTarget.h @@ -44,6 +44,7 @@ public: void unref() { unref_event_target(); } void add_event_listener(const FlyString& event_name, NonnullRefPtr); + void remove_event_listener(const FlyString& event_name, NonnullRefPtr); virtual void dispatch_event(NonnullRefPtr) = 0; diff --git a/Libraries/LibWeb/DOM/EventTarget.idl b/Libraries/LibWeb/DOM/EventTarget.idl index 32c6c76370b..13debb22355 100644 --- a/Libraries/LibWeb/DOM/EventTarget.idl +++ b/Libraries/LibWeb/DOM/EventTarget.idl @@ -1,5 +1,6 @@ interface EventTarget { void addEventListener(DOMString type, EventListener? callback); + void removeEventListener(DOMString type, EventListener? callback); }