On Mon, 2006-03-06 at 09:09 -0500, Derek Atkins wrote: > David, > > David Hampton <[EMAIL PROTECTED]> writes: > > > + ed.node = acc; > > + ed.idx = 0; > > + qof_event_gen(&acc->inst.entity, QOF_EVENT_MODIFY, &ed); > > + > > if (qof_commit_edit_part2(&acc->inst, on_err, noop, acc_free)) > > gnc_engine_gen_event (&acc->inst.entity, GNC_EVENT_MODIFY); > > } > > Two problems here: > > 1) You shouldn't need this particular construct for the MODIFY event. > You can lookup the modified Account based on the QofEntity in the > event callback, so you shouldn't need to pass the actual Account* > in the event.
OK, I can see how that should work. > 2) You've now changed the MODIFY API, and I'm not convinced you've > changed it globally. That could be dangerous, in particular if the > event gets emitted from somewhere that didn't know about the > change. No, I've added a new modify api using the qof_event_gen function. The old api using the gnc_engine_gen_event call is still there and is unchanged. Since the account tree model must use the qof_event system for the REMOVE notification because of extra data required, it makes sense to use that API for all the events that account tree model watches. The qof_event_gen call should probably be moved inside of the 'if' statement, but I was getting persistent crashes when it was in that location. When xaccAccountCommitEdit is called at the end of account destruction, the commit_edit_part2 call frees the allocated data structure and then the old callback functions is invoked. I am unclear why the exiting event generation hook ever worked in this position since it can be called on a freed data structure. I didn't have time to analyze the problem further, thus the current location of the call to qof_event_gen. David _______________________________________________ gnucash-devel mailing list [email protected] https://lists.gnucash.org/mailman/listinfo/gnucash-devel
