diff options
author | Bo Yang <struggleyb.nku@gmail.com> | 2009-08-13 09:33:24 +0000 |
---|---|---|
committer | Bo Yang <struggleyb.nku@gmail.com> | 2009-08-13 09:33:24 +0000 |
commit | 13fadb12fb400818e0ccb4c38b3bfce70ccfdad2 (patch) | |
tree | 19c55b39d97567a37b88b49aaaac13b21b9f24ee /src/events/event_listener.c | |
parent | bf6bc398bd40e39a016725550f5b8446a01ee2d1 (diff) | |
download | libdom-13fadb12fb400818e0ccb4c38b3bfce70ccfdad2.tar.gz libdom-13fadb12fb400818e0ccb4c38b3bfce70ccfdad2.tar.bz2 |
Merge the Events module (branches/struggleyb/libdom-events) back to trunk. :)
svn path=/trunk/dom/; revision=9236
Diffstat (limited to 'src/events/event_listener.c')
-rw-r--r-- | src/events/event_listener.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/events/event_listener.c b/src/events/event_listener.c new file mode 100644 index 0000000..3c3c14c --- /dev/null +++ b/src/events/event_listener.c @@ -0,0 +1,62 @@ +/* + * This file is part of libdom. + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2009 Bo Yang <struggleyb.nku@gmail.com> + */ + +#include "events/event_listener.h" +#include "core/document.h" + +/** + * Create an EventListener + * + * \param doc The document object + * \param handler The event function + * \param pw The private data + * \param listener The returned EventListener + * \return DOM_NO_ERR on success, DOM_NO_MEM_ERR on memory exhaustion. + */ +dom_exception dom_event_listener_create(struct dom_document *doc, + handle_event handler, void *pw, dom_event_listener **listener) +{ + dom_event_listener *ret = (dom_event_listener *) _dom_document_alloc( + doc, NULL, sizeof(dom_event_listener)); + if (ret == NULL) + return DOM_NO_MEM_ERR; + + ret->handler = handler; + ret->pw = pw; + ret->refcnt = 1; + ret->doc = doc; + + *listener = ret; + + return DOM_NO_ERR; +} + +/** + * Claim a new reference on the listener object + * + * \param listener The EventListener object + */ +void dom_event_listener_ref(dom_event_listener *listener) +{ + listener->refcnt++; +} + +/** + * Release a reference on the listener object + * + * \param listener The EventListener object + */ +void dom_event_listener_unref(dom_event_listener *listener) +{ + if (listener->refcnt > 0) + listener->refcnt--; + + if (listener->refcnt == 0) + _dom_document_alloc(listener->doc, listener, + sizeof(dom_event_listener)); +} + |