summaryrefslogtreecommitdiff
path: root/src/events/event_listener.c
diff options
context:
space:
mode:
authorBo Yang <struggleyb.nku@gmail.com>2009-08-13 09:33:24 +0000
committerBo Yang <struggleyb.nku@gmail.com>2009-08-13 09:33:24 +0000
commit13fadb12fb400818e0ccb4c38b3bfce70ccfdad2 (patch)
tree19c55b39d97567a37b88b49aaaac13b21b9f24ee /src/events/event_listener.c
parentbf6bc398bd40e39a016725550f5b8446a01ee2d1 (diff)
downloadlibdom-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.c62
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));
+}
+