diff --git a/src/engine/GNCId.h b/src/engine/GNCId.h index 91d926ce10..b6a40cfaaf 100644 --- a/src/engine/GNCId.h +++ b/src/engine/GNCId.h @@ -47,6 +47,7 @@ * identifier. */ typedef char * GNCIdType; +typedef const char * GNCIdTypeConst; #define GNC_ID_NONE NULL #define GNC_ID_NULL "null" diff --git a/src/engine/Transaction.c b/src/engine/Transaction.c index 2187565b0b..e18b317d6c 100644 --- a/src/engine/Transaction.c +++ b/src/engine/Transaction.c @@ -367,30 +367,6 @@ xaccSplitEqual(const Split *sa, const Split *sb, return(TRUE); } -/******************************************************************** - * xaccSplitGetSlots - ********************************************************************/ - -kvp_frame * -xaccSplitGetSlots(Split * s) { - if(!s) return NULL; - return(s->kvp_data); -} - -void -xaccSplitSetSlots_nc(Split *s, kvp_frame *frm) -{ - g_return_if_fail(s); - g_return_if_fail(frm); - - if(s->kvp_data) - { - kvp_frame_delete(s->kvp_data); - } - - s->kvp_data = frm; -} - /******************************************************************** * Account funcs ********************************************************************/ @@ -437,7 +413,8 @@ xaccSplitSetGUID (Split *split, const GUID *guid) check_open (split->parent); xaccRemoveEntity(split->book->entity_table, &split->guid); split->guid = *guid; - xaccStoreEntity(split->book->entity_table, split, &split->guid, GNC_ID_SPLIT); + xaccStoreEntity(split->book->entity_table, split, + &split->guid, GNC_ID_SPLIT); } /********************************************************************\ @@ -569,6 +546,34 @@ get_commodity_denom(Split * s) } } +/******************************************************************** + * xaccSplitGetSlots + ********************************************************************/ + +kvp_frame * +xaccSplitGetSlots (Split * s) +{ + if(!s) return NULL; + return(s->kvp_data); +} + +void +xaccSplitSetSlots_nc(Split *s, kvp_frame *frm) +{ + g_return_if_fail(s); + g_return_if_fail(frm); + check_open (s->parent); + + if (s->kvp_data && (s->kvp_data != frm)) + { + kvp_frame_delete(s->kvp_data); + } + + s->kvp_data = frm; + + gen_event (s); +} + /********************************************************************\ \********************************************************************/ @@ -1040,23 +1045,27 @@ xaccTransEqual(const Transaction *ta, const Transaction *tb, ********************************************************************/ kvp_frame * -xaccTransGetSlots(Transaction *t) { +xaccTransGetSlots (Transaction *t) +{ if(!t) return NULL; return(t->kvp_data); } void -xaccTransSetSlots_nc(Transaction *t, kvp_frame *frm) +xaccTransSetSlots_nc (Transaction *t, kvp_frame *frm) { - g_return_if_fail(t); - g_return_if_fail(frm); + g_return_if_fail(t); + g_return_if_fail(frm); + check_open (t); - if(t->kvp_data) - { - kvp_frame_delete(t->kvp_data); - } + if (t->kvp_data && (t->kvp_data != frm)) + { + kvp_frame_delete(t->kvp_data); + } - t->kvp_data = frm; + t->kvp_data = frm; + + gen_event_trans (t); } /********************************************************************\ diff --git a/src/engine/gnc-session.c b/src/engine/gnc-session.c index a28e662853..9fcc74c4ed 100644 --- a/src/engine/gnc-session.c +++ b/src/engine/gnc-session.c @@ -361,6 +361,7 @@ gnc_session_load (GNCSession *session) xaccLogDisable(); + gnc_book_set_backend (session->book, NULL); gnc_book_destroy (session->book); session->book = gnc_book_new (); diff --git a/src/engine/gw-engine-spec.scm b/src/engine/gw-engine-spec.scm index aab24aa5b9..b2cf7fdb57 100644 --- a/src/engine/gw-engine-spec.scm +++ b/src/engine/gw-engine-spec.scm @@ -375,6 +375,7 @@ "#include \n" "#include \n" "#include \n" + "#include \n" "#include \n" "#include \n" "#include \n" @@ -387,7 +388,16 @@ (if client-only? '() (gw:inline-scheme '(use-modules (gnucash engine)))))) - + + (let ((wt (gw:wrap-enumeration mod ' + "GNCEngineEventType" + "const GNCEngineEventType"))) + (gw:enum-add-value! wt "GNC_EVENT_NONE" 'gnc-event-none) + (gw:enum-add-value! wt "GNC_EVENT_CREATE" 'gnc-event-create) + (gw:enum-add-value! wt "GNC_EVENT_MODIFY" 'gnc-event-modify) + (gw:enum-add-value! wt "GNC_EVENT_DESTROY" 'gnc-event-destroy) + (gw:enum-add-value! wt "GNC_EVENT_ALL" 'gnc-event-all)) + (gw:wrap-non-native-type mod ' "Account*" "const Account*") (gw:wrap-non-native-type mod ' "Account**" "const Account**")