28 #include "qofevent-p.h"
31 static guint suspend_counter = 0;
32 static gint next_handler_id = 1;
33 static guint handler_run_level = 0;
34 static guint pending_deletes = 0;
35 static GList *handlers = NULL;
43 find_next_handler_id (
void)
50 handler_id = next_handler_id;
57 if (hi->handler_id == handler_id)
67 next_handler_id = handler_id + 1;
72 #ifndef QOF_DISABLE_DEPRECATED
80 ENTER (
"(handler=%p, data=%p)", handler, user_data);
85 PERR (
"no handler specified");
88 PINFO (
" deprecated handler specified");
90 handler_id = find_next_handler_id ();
94 hi->old_handler = handler;
95 hi->user_data = user_data;
96 hi->handler_id = handler_id;
98 handlers = g_list_prepend (handlers, hi);
100 LEAVE (
" (handler=%p, data=%p) handler_id=%d", handler, user_data,
113 ENTER (
"(handler=%p, data=%p)", handler, user_data);
118 PERR (
"no handler specified");
123 handler_id = find_next_handler_id ();
129 hi->user_data = user_data;
130 hi->handler_id = handler_id;
132 handlers = g_list_prepend (handlers, hi);
133 LEAVE (
"(handler=%p, data=%p) handler_id=%d", handler, user_data,
143 ENTER (
"(handler_id=%d)", handler_id);
144 for (node = handlers; node; node = node->next)
148 if (hi->handler_id != handler_id)
157 LEAVE (
"(handler_id=%d) handler=%p data=%p", handler_id,
159 #ifndef QOF_DISABLE_DEPRECATED
161 LEAVE (
"(handler_id=%d) handler=%p data=%p", handler_id,
162 hi->old_handler, hi->user_data);
167 #ifndef QOF_DISABLE_DEPRECATED
168 hi->old_handler = NULL;
171 if (handler_run_level == 0)
173 handlers = g_list_remove_link (handlers, node);
174 g_list_free_1 (node);
185 PERR (
"no such handler: %d", handler_id);
193 if (suspend_counter == 0)
195 PERR (
"suspend counter overflow");
202 if (suspend_counter == 0)
204 PERR (
"suspend counter underflow");
216 GList *next_node = NULL;
217 gboolean use_old_handlers = FALSE;
219 g_return_if_fail (entity);
221 if (event_id <= QOF_EVENT__LAST)
222 use_old_handlers = TRUE;
234 for (node = handlers; node; node = next_node)
238 next_node = node->next;
239 #ifndef QOF_DISABLE_DEPRECATED
240 if ((hi->old_handler) && (use_old_handlers))
242 PINFO (
" deprecated: id=%d hi=%p han=%p", hi->handler_id, hi,
244 hi->old_handler ((
GUID *) & entity->guid, entity->e_type,
245 event_id, hi->user_data);
250 PINFO (
"id=%d type=%s", hi->handler_id, entity->e_type);
251 hi->
handler (entity, event_id, hi->user_data, event_data);
259 if (handler_run_level == 0 && pending_deletes)
261 for (node = handlers; node; node = next_node)
264 next_node = node->next;
266 #ifndef QOF_DISABLE_DEPRECATED
267 && (hi->old_handler == NULL)
272 handlers = g_list_remove_link (handlers, node);
273 g_list_free_1 (node);
288 qof_event_generate_internal (entity, event_id, event_data);
300 qof_event_generate_internal (entity, event_id, event_data);
313 qof_event_generate_internal (&ent, event_id, NULL);