EventTarget.h 877 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #pragma once
  2. #include <AK/Noncopyable.h>
  3. #include <AK/String.h>
  4. #include <AK/Vector.h>
  5. #include <LibWeb/Forward.h>
  6. namespace Web {
  7. class EventTarget {
  8. AK_MAKE_NONCOPYABLE(EventTarget);
  9. AK_MAKE_NONMOVABLE(EventTarget);
  10. public:
  11. virtual ~EventTarget();
  12. void ref() { ref_event_target(); }
  13. void unref() { unref_event_target(); }
  14. void add_event_listener(String event_name, NonnullRefPtr<EventListener>);
  15. virtual void dispatch_event(String event_name) = 0;
  16. struct EventListenerRegistration {
  17. String event_name;
  18. NonnullRefPtr<EventListener> listener;
  19. };
  20. const Vector<EventListenerRegistration>& listeners() const { return m_listeners; }
  21. protected:
  22. EventTarget();
  23. virtual void ref_event_target() = 0;
  24. virtual void unref_event_target() = 0;
  25. private:
  26. Vector<EventListenerRegistration> m_listeners;
  27. };
  28. }