summaryrefslogtreecommitdiff
path: root/src/events/custom_event.c
blob: 920c23ebcae8c30d0e53071db2beb71d2eb88bcc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
 * 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/custom_event.h"

#include "core/document.h"

static void _virtual_dom_custom_event_destroy(struct dom_event *evt);

static struct dom_event_private_vtable _event_vtable = {
	_virtual_dom_custom_event_destroy
};

/* Constructor */
dom_exception _dom_custom_event_create(struct dom_document *doc, 
		struct dom_custom_event **evt)
{
	*evt = _dom_document_alloc(doc, NULL, sizeof(dom_custom_event));
	if (*evt == NULL) 
		return DOM_NO_MEM_ERR;
	
	((struct dom_event *) *evt)->vtable = &_event_vtable;

	return _dom_custom_event_initialise(doc, *evt);
}

/* Destructor */
void _dom_custom_event_destroy(struct dom_document *doc, 
		struct dom_custom_event *evt)
{
	_dom_custom_event_finalise(doc, evt);

	_dom_document_alloc(doc, evt, 0);
}

/* Initialise function */
dom_exception _dom_custom_event_initialise(struct dom_document *doc, 
		struct dom_custom_event *evt)
{
	evt->detail = NULL;
	return _dom_event_initialise(doc, &evt->base);
}

/* Finalise function */
void _dom_custom_event_finalise(struct dom_document *doc, 
		struct dom_custom_event *evt)
{
	evt->detail = NULL;
	_dom_event_finalise(doc, &evt->base);
}

/* The virtual destroy function */
void _virtual_dom_custom_event_destroy(struct dom_event *evt)
{
	_dom_custom_event_destroy(evt->doc, (dom_custom_event *) evt);
}

/*----------------------------------------------------------------------*/
/* The public API */

/**
 * Get the detail object of this custom event
 *
 * \param evt     The Event object
 * \param detail  The returned detail object
 * \return DOM_NO_ERR on success, appropriate dom_exception on failure.
 */
dom_exception _dom_custom_event_get_detail(dom_custom_event *evt,
		void **detail)
{
	*detail = evt->detail;

	return DOM_NO_ERR;
}

/**
 * Initialise this custom event
 *
 * \param evt         The Event object
 * \param namespace   The namespace of this new Event
 * \param type        The Event type
 * \param bubble      Whether this event can bubble
 * \param cancelable  Whether this event is cancelable
 * \param detail      The detail object of this custom event
 * \return DOM_NO_ERR on success, appropriate dom_exception on failure.
 */
dom_exception _dom_custom_event_init_ns(dom_custom_event *evt, 
		struct dom_string *namespace, struct dom_string *type,
		bool bubble, bool cancelable, void *detail)
{
	evt->detail = detail;
	return _dom_event_init_ns(&evt->base, namespace, type, bubble, 
			cancelable);
}