diff --git a/ChangeLog b/ChangeLog index 8240d2a632..ca5808bd12 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2006-02-26 Neil Williams + + * 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 * 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 * factor one chunk out into get_any_account() * Comment some things that are bogus or need improvement - diff --git a/lib/libqof/qof/deprecated.c b/lib/libqof/qof/deprecated.c index 3546d23e2a..74d4cf1587 100644 --- a/lib/libqof/qof/deprecated.c +++ b/lib/libqof/qof/deprecated.c @@ -76,5 +76,5 @@ void gnc_engine_resume_events (void) } void gnc_engine_gen_event (QofEntity *entity, GNCEngineEventType event_type) { - qof_event_gen(entity, event_type); + qof_event_gen(entity, event_type, NULL); } diff --git a/lib/libqof/qof/qofbook.c b/lib/libqof/qof/qofbook.c index ba821fbc82..b730557521 100644 --- a/lib/libqof/qof/qofbook.c +++ b/lib/libqof/qof/qofbook.c @@ -86,7 +86,7 @@ qof_book_new (void) qof_book_init(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); return book; } @@ -108,7 +108,7 @@ qof_book_destroy (QofBook *book) ENTER ("book=%p", book); 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. * Do this before tearing into the rest of the book. diff --git a/lib/libqof/qof/qofevent-p.h b/lib/libqof/qof/qofevent-p.h index 70ce729605..742ed369c5 100644 --- a/lib/libqof/qof/qofevent-p.h +++ b/lib/libqof/qof/qofevent-p.h @@ -30,7 +30,7 @@ /* for backwards compatibility - to be moved back to qofevent.c in libqof2 */ typedef struct { - GNCEngineEventHandler old_handler; + GNCEngineEventHandler old_handler; /** \deprecated */ QofEventHandler handler; gpointer user_data; @@ -46,6 +46,6 @@ qof_event_generate (const GUID *guid, QofIdType e_type, QofEventId event_id); /* 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 diff --git a/lib/libqof/qof/qofevent.c b/lib/libqof/qof/qofevent.c index 8054ca8053..7833e7b395 100644 --- a/lib/libqof/qof/qofevent.c +++ b/lib/libqof/qof/qofevent.c @@ -125,7 +125,6 @@ qof_event_register_handler (QofEventHandler handler, gpointer user_data) hi->handler_id = handler_id; handlers = g_list_prepend (handlers, hi); - LEAVE ("(handler=%p, data=%p) handler_id=%d", handler, user_data, handler_id); return handler_id; } @@ -197,7 +196,8 @@ qof_event_resume (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 *next_node = NULL; @@ -212,10 +212,10 @@ qof_event_generate_internal (QofEntity *entity, QofEventId event_id) switch (event_id) { - case QOF_EVENT_NONE: { - /* if none, don't log, just return. */ - return; - } + case QOF_EVENT_NONE: { + /* if none, don't log, just return. */ + return; + } } handler_run_level++; @@ -233,8 +233,9 @@ qof_event_generate_internal (QofEntity *entity, QofEventId event_id) } if (hi->handler) { - PINFO("id=%d hi=%p han=%p", hi->handler_id, hi, hi->handler); - hi->handler (entity, event_id, hi->user_data); + PINFO("id=%d hi=%p han=%p data=%p", hi->handler_id, hi, + hi->handler, event_data); + hi->handler (entity, event_id, hi->user_data, event_data); } } handler_run_level--; @@ -261,16 +262,16 @@ qof_event_generate_internal (QofEntity *entity, QofEventId event_id) } void -qof_event_force (QofEntity *entity, QofEventId event_id) +qof_event_force (QofEntity *entity, QofEventId event_id, gpointer event_data) { if (!entity) return; - qof_event_generate_internal (entity, event_id); + qof_event_generate_internal (entity, event_id, event_data); } void -qof_event_gen (QofEntity *entity, QofEventId event_id) +qof_event_gen (QofEntity *entity, QofEventId event_id, gpointer event_data) { if (!entity) return; @@ -278,7 +279,7 @@ qof_event_gen (QofEntity *entity, QofEventId event_id) if (suspend_counter) return; - qof_event_generate_internal (entity, event_id); + qof_event_generate_internal (entity, event_id, event_data); } /* deprecated */ @@ -291,7 +292,7 @@ qof_event_generate (const GUID *guid, QofIdType e_type, ent.e_type = e_type; if (suspend_counter) return; /* caution: this is an incomplete entity! */ - qof_event_generate_internal (&ent, event_id); + qof_event_generate_internal (&ent, event_id, NULL); } /* =========================== END OF FILE ======================= */ diff --git a/lib/libqof/qof/qofevent.h b/lib/libqof/qof/qofevent.h index d95d321ed5..899c0ddfd5 100644 --- a/lib/libqof/qof/qofevent.h +++ b/lib/libqof/qof/qofevent.h @@ -1,6 +1,7 @@ /******************************************************************** * qofevent.h -- QOF event handling interface * * Copyright 2000 Dave Peticolas * + * Copyright 2006 Neil Williams * * * * This program is free software; you can redistribute it and/or * * 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. */ #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 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. - * @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, - 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 user_data: data provided when handler is invoked + * @param handler_data: data provided when handler is invoked * * @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 */ @@ -100,8 +102,11 @@ void qof_event_unregister_handler (gint handler_id); @param entity: the entity generating 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. *