using new events with object argument

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13396 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Neil Williams 2006-02-26 18:59:38 +00:00
parent cec7bb732c
commit 8fffaf8c7a
6 changed files with 48 additions and 28 deletions

View File

@ -1,3 +1,18 @@
2006-02-26 Neil Williams <linux@codehelp.co.uk>
* qof/qof-be-utils.h : Replace macro to restore
programme flow.
* qof/qofevent.c :
* qof/qofevent.h : Outline method to make application
events easier to use.
* qof/deprecated.c : Define deprecated event functions
that call new QofEvents with a NULL event_data argument.
* qof/qofbook.c : Use new qof_event arguments.
* qof/qofevent.c : Allow events to be generated with an
optional event_data argument.
* qof/qofevent.h : Doxygen tweaks.
2006-02-26 Joshua Sled <jsled@asynchronous.org> 2006-02-26 Joshua Sled <jsled@asynchronous.org>
* src/report/utility-reports/Makefile.am (SCM_FILE_LINKS): * src/report/utility-reports/Makefile.am (SCM_FILE_LINKS):
@ -3006,4 +3021,3 @@ r12231 | chris | 2006-01-01 17:26:15 -0500 (Sun, 01 Jan 2006) | 9 lines
* lots of control-flow simplification * lots of control-flow simplification
* factor one chunk out into get_any_account() * factor one chunk out into get_any_account()
* Comment some things that are bogus or need improvement * Comment some things that are bogus or need improvement

View File

@ -76,5 +76,5 @@ void gnc_engine_resume_events (void)
} }
void gnc_engine_gen_event (QofEntity *entity, GNCEngineEventType event_type) void gnc_engine_gen_event (QofEntity *entity, GNCEngineEventType event_type)
{ {
qof_event_gen(entity, event_type); qof_event_gen(entity, event_type, NULL);
} }

View File

@ -86,7 +86,7 @@ qof_book_new (void)
qof_book_init(book); qof_book_init(book);
qof_object_book_begin (book); qof_object_book_begin (book);
qof_event_gen (&book->inst.entity, QOF_EVENT_CREATE); qof_event_gen (&book->inst.entity, QOF_EVENT_CREATE, NULL);
LEAVE ("book=%p", book); LEAVE ("book=%p", book);
return book; return book;
} }
@ -108,7 +108,7 @@ qof_book_destroy (QofBook *book)
ENTER ("book=%p", book); ENTER ("book=%p", book);
book->shutting_down = TRUE; book->shutting_down = TRUE;
qof_event_force (&book->inst.entity, QOF_EVENT_DESTROY); qof_event_force (&book->inst.entity, QOF_EVENT_DESTROY, NULL);
/* Call the list of finalizers, let them do their thing. /* Call the list of finalizers, let them do their thing.
* Do this before tearing into the rest of the book. * Do this before tearing into the rest of the book.

View File

@ -30,7 +30,7 @@
/* for backwards compatibility - to be moved back to qofevent.c in libqof2 */ /* for backwards compatibility - to be moved back to qofevent.c in libqof2 */
typedef struct typedef struct
{ {
GNCEngineEventHandler old_handler; GNCEngineEventHandler old_handler; /** \deprecated */
QofEventHandler handler; QofEventHandler handler;
gpointer user_data; gpointer user_data;
@ -46,6 +46,6 @@ qof_event_generate (const GUID *guid, QofIdType e_type,
QofEventId event_id); QofEventId event_id);
/* generates an event even when events are suspended! */ /* generates an event even when events are suspended! */
void qof_event_force (QofEntity *entity, QofEventId event_id); void qof_event_force (QofEntity *entity, QofEventId event_id, gpointer event_data);
#endif #endif

View File

@ -125,7 +125,6 @@ qof_event_register_handler (QofEventHandler handler, gpointer user_data)
hi->handler_id = handler_id; hi->handler_id = handler_id;
handlers = g_list_prepend (handlers, hi); handlers = g_list_prepend (handlers, hi);
LEAVE ("(handler=%p, data=%p) handler_id=%d", handler, user_data, handler_id); LEAVE ("(handler=%p, data=%p) handler_id=%d", handler, user_data, handler_id);
return handler_id; return handler_id;
} }
@ -197,7 +196,8 @@ qof_event_resume (void)
} }
static void static void
qof_event_generate_internal (QofEntity *entity, QofEventId event_id) qof_event_generate_internal (QofEntity *entity, QofEventId event_id,
gpointer event_data)
{ {
GList *node; GList *node;
GList *next_node = NULL; GList *next_node = NULL;
@ -212,10 +212,10 @@ qof_event_generate_internal (QofEntity *entity, QofEventId event_id)
switch (event_id) switch (event_id)
{ {
case QOF_EVENT_NONE: { case QOF_EVENT_NONE: {
/* if none, don't log, just return. */ /* if none, don't log, just return. */
return; return;
} }
} }
handler_run_level++; handler_run_level++;
@ -233,8 +233,9 @@ qof_event_generate_internal (QofEntity *entity, QofEventId event_id)
} }
if (hi->handler) if (hi->handler)
{ {
PINFO("id=%d hi=%p han=%p", hi->handler_id, hi, hi->handler); PINFO("id=%d hi=%p han=%p data=%p", hi->handler_id, hi,
hi->handler (entity, event_id, hi->user_data); hi->handler, event_data);
hi->handler (entity, event_id, hi->user_data, event_data);
} }
} }
handler_run_level--; handler_run_level--;
@ -261,16 +262,16 @@ qof_event_generate_internal (QofEntity *entity, QofEventId event_id)
} }
void void
qof_event_force (QofEntity *entity, QofEventId event_id) qof_event_force (QofEntity *entity, QofEventId event_id, gpointer event_data)
{ {
if (!entity) if (!entity)
return; return;
qof_event_generate_internal (entity, event_id); qof_event_generate_internal (entity, event_id, event_data);
} }
void void
qof_event_gen (QofEntity *entity, QofEventId event_id) qof_event_gen (QofEntity *entity, QofEventId event_id, gpointer event_data)
{ {
if (!entity) if (!entity)
return; return;
@ -278,7 +279,7 @@ qof_event_gen (QofEntity *entity, QofEventId event_id)
if (suspend_counter) if (suspend_counter)
return; return;
qof_event_generate_internal (entity, event_id); qof_event_generate_internal (entity, event_id, event_data);
} }
/* deprecated */ /* deprecated */
@ -291,7 +292,7 @@ qof_event_generate (const GUID *guid, QofIdType e_type,
ent.e_type = e_type; ent.e_type = e_type;
if (suspend_counter) return; if (suspend_counter) return;
/* caution: this is an incomplete entity! */ /* caution: this is an incomplete entity! */
qof_event_generate_internal (&ent, event_id); qof_event_generate_internal (&ent, event_id, NULL);
} }
/* =========================== END OF FILE ======================= */ /* =========================== END OF FILE ======================= */

View File

@ -1,6 +1,7 @@
/******************************************************************** /********************************************************************
* qofevent.h -- QOF event handling interface * * qofevent.h -- QOF event handling interface *
* Copyright 2000 Dave Peticolas <dave@krondo.com> * * Copyright 2000 Dave Peticolas <dave@krondo.com> *
* Copyright 2006 Neil Williams <linux@codehelp.co.uk> *
* * * *
* This program is free software; you can redistribute it and/or * * This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as * * modify it under the terms of the GNU General Public License as *
@ -57,26 +58,27 @@ any process can define their own events.
event identifiers must be larger than this. */ event identifiers must be larger than this. */
#define QOF_DEFAULT_EVENT_LIMIT QOF_EVENT__LAST #define QOF_DEFAULT_EVENT_LIMIT QOF_EVENT__LAST
/** \brief Handler invoked when an engine event occurs. /** \brief Handler invoked when an event is generated.
* *
* @param ent: Entity generating the event * @param ent: Entity generating the event
* @param event_type: The name of the event, including additional names and * @param event_type: The id of the event, including additional identifiers and
the older defaults. the older defaults.
* @param user_data: user_data supplied when handler was registered. * @param handler_data: data supplied when handler was registered.
* @param event_data: data to be supplied when handler is invoked.
*/ */
typedef void (*QofEventHandler) (QofEntity *ent, QofEventId event_type, typedef void (*QofEventHandler) (QofEntity *ent, QofEventId event_type,
gpointer user_data); gpointer handler_data, gpointer event_data);
/** \brief Register a handler for engine events. /** \brief Register a handler for events.
* *
* @param handler: handler to register * @param handler: handler to register
* @param user_data: data provided when handler is invoked * @param handler_data: data provided when handler is invoked
* *
* @return id identifying handler * @return id identifying handler
*/ */
gint qof_event_register_handler (QofEventHandler handler, gpointer user_data); gint qof_event_register_handler (QofEventHandler handler, gpointer handler_data);
/** \brief Unregister an engine event handler. /** \brief Unregister an event handler.
* *
* @param handler_id: the id of the handler to unregister * @param handler_id: the id of the handler to unregister
*/ */
@ -100,8 +102,11 @@ void qof_event_unregister_handler (gint handler_id);
@param entity: the entity generating the event @param entity: the entity generating the event
@param event_type: the name of the event. @param event_type: the name of the event.
@param event_data: Data to be passed to the event handler just for
this one event. Can be NULL.
*/ */
void qof_event_gen (QofEntity *entity, QofEventId event_type); void qof_event_gen (QofEntity *entity, QofEventId event_type,
gpointer event_data);
/** \brief Suspend all engine events. /** \brief Suspend all engine events.
* *