diff --git a/Libraries/LibWeb/DOM/EventTarget.cpp b/Libraries/LibWeb/DOM/EventTarget.cpp index 1af0b18458..4f543feb61 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 b322336b57..17e421ec82 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 32c6c76370..13debb2235 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); }