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. #include <stdlib.h>
  9.  
  10. #include "events/event_listener.h"
  11. #include "core/document.h"
  12.  
  13. /**
  14.  * Create an EventListener
  15.  *
  16.  * \param doc       The document object
  17.  * \param handler   The event function
  18.  * \param pw        The private data
  19.  * \param listener  The returned EventListener
  20.  * \return DOM_NO_ERR on success, DOM_NO_MEM_ERR on memory exhaustion.
  21.  */
  22. dom_exception dom_event_listener_create(struct dom_document *doc,
  23.                 handle_event handler, void *pw, dom_event_listener **listener)
  24. {
  25.         dom_event_listener *ret = malloc(sizeof(dom_event_listener));
  26.         if (ret == NULL)
  27.                 return DOM_NO_MEM_ERR;
  28.        
  29.         ret->handler = handler;
  30.         ret->pw = pw;
  31.         ret->refcnt = 1;
  32.         ret->doc = doc;
  33.  
  34.         *listener = ret;
  35.  
  36.         return DOM_NO_ERR;
  37. }
  38.  
  39. /**
  40.  * Claim a new reference on the listener object
  41.  *
  42.  * \param listener  The EventListener object
  43.  */
  44. void dom_event_listener_ref(dom_event_listener *listener)
  45. {
  46.         listener->refcnt++;
  47. }
  48.  
  49. /**
  50.  * Release a reference on the listener object
  51.  *
  52.  * \param listener  The EventListener object
  53.  */
  54. void dom_event_listener_unref(dom_event_listener *listener)
  55. {
  56.         if (listener->refcnt > 0)
  57.                 listener->refcnt--;
  58.  
  59.         if (listener->refcnt == 0)
  60.                 free(listener);
  61. }
  62.  
  63.