Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * This file is part of libdom.
  3.  * Licensed under the MIT License,
  4.  *                http://www.opensource.org/licenses/mit-license.php
  5.  * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com>
  6.  */
  7.  
  8. #ifndef dom_internal_events_event_target_h_
  9. #define dom_internal_events_event_target_h_
  10.  
  11. #include <dom/core/document.h>
  12. #include <dom/events/event.h>
  13. #include <dom/events/mutation_event.h>
  14. #include <dom/events/event_target.h>
  15. #include <dom/events/event_listener.h>
  16.  
  17. #include "events/dispatch.h"
  18.  
  19. #include "utils/list.h"
  20.  
  21. /**
  22.  * Listener Entry
  23.  */
  24. struct listener_entry {
  25.         struct list_entry list;
  26.                 /**< The listener list registered at the same
  27.                  * EventTarget */
  28.         dom_string *type; /**< Event type */
  29.         dom_event_listener *listener;   /**< The EventListener */
  30.         bool capture;   /**< Whether this listener is in capture phase */
  31. };
  32.  
  33. /**
  34.  * EventTarget internal class
  35.  */
  36. struct dom_event_target_internal {
  37.         struct listener_entry *listeners;      
  38.                         /**< The listeners of this EventTarget. */
  39. };
  40.  
  41. typedef struct dom_event_target_internal dom_event_target_internal;
  42.  
  43. /* Entry for a EventTarget, used to record the bubbling list */
  44. typedef struct dom_event_target_entry {
  45.         struct list_entry entry;        /**< The list entry */
  46.         dom_event_target *et;   /**< The node */
  47. } dom_event_target_entry;
  48.  
  49. /**
  50.  * Constructor and destructor: Since this object is not intended to be
  51.  * allocated alone, it should be embedded into the Node object, there is
  52.  * no constructor and destructor for it.
  53.  */
  54.  
  55. /* Initialise this EventTarget */
  56. dom_exception _dom_event_target_internal_initialise(
  57.                 dom_event_target_internal *eti);
  58.  
  59. /* Finalise this EventTarget */
  60. void _dom_event_target_internal_finalise(dom_event_target_internal *eti);
  61.  
  62. dom_exception _dom_event_target_add_event_listener(
  63.                 dom_event_target_internal *eti,
  64.                 dom_string *type, struct dom_event_listener *listener,
  65.                 bool capture);
  66.  
  67. dom_exception _dom_event_target_remove_event_listener(
  68.                 dom_event_target_internal *eti,
  69.                 dom_string *type, struct dom_event_listener *listener,
  70.                 bool capture);
  71.  
  72. dom_exception _dom_event_target_add_event_listener_ns(
  73.                 dom_event_target_internal *eti,
  74.                 dom_string *namespace, dom_string *type,
  75.                 struct dom_event_listener *listener, bool capture);
  76.  
  77. dom_exception _dom_event_target_remove_event_listener_ns(
  78.                 dom_event_target_internal *eti,
  79.                 dom_string *namespace, dom_string *type,
  80.                 struct dom_event_listener *listener, bool capture);
  81.  
  82. dom_exception _dom_event_target_dispatch(dom_event_target *et,
  83.                 dom_event_target_internal *eti,
  84.                 struct dom_event *evt, dom_event_flow_phase phase,
  85.                 bool *success);
  86.  
  87. #endif
  88.