diff --git a/src/backend/file/io-gncxml-v1.c b/src/backend/file/io-gncxml-v1.c index 1f5b856f3e..c7580feda5 100644 --- a/src/backend/file/io-gncxml-v1.c +++ b/src/backend/file/io-gncxml-v1.c @@ -2869,6 +2869,7 @@ txn_restore_guid_end_handler(gpointer data_for_children, gpointer parent_data, gpointer global_data, gpointer *result, const gchar *tag) { + GNCParseStatus *pstatus = (GNCParseStatus *) global_data; Transaction *t = (Transaction *) parent_data; gchar *txt = NULL; GUID gid; @@ -2884,7 +2885,7 @@ txn_restore_guid_end_handler(gpointer data_for_children, g_return_val_if_fail(ok, FALSE); - if(xaccTransLookup(&gid)) { + if(xaccTransLookup(&gid, pstatus->session)) { return(FALSE); } diff --git a/src/backend/postgres/PostgresBackend.c b/src/backend/postgres/PostgresBackend.c index 853720d946..0adbecba9c 100644 --- a/src/backend/postgres/PostgresBackend.c +++ b/src/backend/postgres/PostgresBackend.c @@ -307,7 +307,7 @@ query_cb (PGBackend *be, PGresult *result, int j, gpointer data) /* use markers to avoid redundant traversals of transactions we've * already checked recently. */ - trans = xaccTransLookup (&trans_guid); + trans = xaccTransLookup (&trans_guid, be->session); if (NULL != trans) { if (0 != trans->marker) diff --git a/src/backend/postgres/events.c b/src/backend/postgres/events.c index 85e85eac9d..0c6f829164 100644 --- a/src/backend/postgres/events.c +++ b/src/backend/postgres/events.c @@ -321,7 +321,8 @@ pgendProcessEvents (Backend *bend) pgendCopyTransactionToEngine (be, &(ev->guid)); break; case GNC_EVENT_DESTROY: { - Transaction *trans = xaccTransLookup (&(ev->guid)); + Transaction *trans = xaccTransLookup (&(ev->guid), + be->session); xaccTransBeginEdit (trans); xaccTransDestroy (trans); xaccTransCommitEdit (trans); diff --git a/src/backend/postgres/txn.c b/src/backend/postgres/txn.c index 83bfff2217..a08ea5cf08 100644 --- a/src/backend/postgres/txn.c +++ b/src/backend/postgres/txn.c @@ -527,7 +527,7 @@ pgendCopyTransactionToEngine (PGBackend *be, const GUID *trans_guid) pgendDisable(be); /* first, see if we already have such a transaction */ - trans = xaccTransLookup (trans_guid); + trans = xaccTransLookup (trans_guid, be->session); if (!trans) { trans = xaccMallocTransaction(be->session); diff --git a/src/backend/postgres/txnmass.c b/src/backend/postgres/txnmass.c index d322cd9805..dd922978d0 100644 --- a/src/backend/postgres/txnmass.c +++ b/src/backend/postgres/txnmass.c @@ -67,7 +67,7 @@ get_mass_trans_cb (PGBackend *be, PGresult *result, int j, gpointer data) /* first, see if we already have such a transaction */ string_to_guid (DB_GET_VAL("transGUID",j), &trans_guid); - trans = xaccTransLookup (&trans_guid); + trans = xaccTransLookup (&trans_guid, be->session); if (trans) { /* If transaction already exists, determine whose data is @@ -157,7 +157,7 @@ get_mass_entry_cb (PGBackend *be, PGresult *result, int j, gpointer data) guid = nullguid; /* just in case the read fails ... */ string_to_guid (DB_GET_VAL("transGUID",j), &guid); - trans = xaccTransLookup (&guid); + trans = xaccTransLookup (&guid, be->session); if (!trans) { PERR ("trans not found, will delete this split\n" diff --git a/src/engine/Query.c b/src/engine/Query.c index e49654e845..fe907e1081 100644 --- a/src/engine/Query.c +++ b/src/engine/Query.c @@ -2378,7 +2378,8 @@ xaccGUIDMatchPredicate(Split * s, PredicateData * pd) xaccAccountLookupEntityTable (guid, s->entity_table)); case GNC_ID_TRANS: - return xaccSplitGetParent (s) == xaccTransLookup (guid); + return (xaccSplitGetParent (s) == + xaccTransLookupEntityTable (guid, s->entity_table)); case GNC_ID_SPLIT: return s == xaccSplitLookup (guid); diff --git a/src/engine/Transaction.c b/src/engine/Transaction.c index e842b0e3e2..a33ec626cf 100644 --- a/src/engine/Transaction.c +++ b/src/engine/Transaction.c @@ -886,10 +886,20 @@ xaccTransSetGUID (Transaction *trans, const GUID *guid) \********************************************************************/ Transaction * -xaccTransLookup (const GUID *guid) +xaccTransLookupEntityTable (const GUID *guid, + GNCEntityTable *entity_table) +{ + /* FIXME: uncomment when entity tables are in sessions */ + /* g_return_val_if_fail (entity_table, NULL); */ + return xaccLookupEntity (guid, GNC_ID_TRANS); +} + +Transaction * +xaccTransLookup (const GUID *guid, GNCSession *session) { if (!guid) return NULL; - return xaccLookupEntity(guid, GNC_ID_TRANS); + g_return_val_if_fail (session, NULL); + return xaccLookupEntity (guid, GNC_ID_TRANS); } /********************************************************************\ diff --git a/src/engine/Transaction.h b/src/engine/Transaction.h index 2c26a0f139..d3b49d4084 100644 --- a/src/engine/Transaction.h +++ b/src/engine/Transaction.h @@ -130,7 +130,7 @@ gboolean xaccTransIsOpen (Transaction *trans); */ const GUID * xaccTransGetGUID (Transaction *trans); GUID xaccTransReturnGUID (Transaction *trans); -Transaction * xaccTransLookup (const GUID *guid); +Transaction * xaccTransLookup (const GUID *guid, GNCSession *session); /* Transaction slots are used to store arbitrary strings, numbers, and diff --git a/src/engine/TransactionP.h b/src/engine/TransactionP.h index d9d5a7f9e4..4ba5afbf7f 100644 --- a/src/engine/TransactionP.h +++ b/src/engine/TransactionP.h @@ -201,6 +201,10 @@ struct transaction_s guint32 idata; /* used by the sql backend for kvp management */ }; +/* Lookup the transaction with the guid, using the given table. */ +Transaction * xaccTransLookupEntityTable (const GUID *guid, + GNCEntityTable *entity_table); + /* Set the transaction's GUID. This should only be done when reading * a transaction from a datafile, or some other external source. Never * call this on an existing transaction! */ diff --git a/src/gnome/top-level.c b/src/gnome/top-level.c index 80b9dd32d0..e02034317b 100644 --- a/src/gnome/top-level.c +++ b/src/gnome/top-level.c @@ -230,7 +230,7 @@ gnc_html_register_url_cb (const char *location, const char *label, break; case GNC_ID_TRANS: - trans = xaccTransLookup (&guid); + trans = xaccTransLookup (&guid, gnc_get_current_session ()); split = NULL; for (node = xaccTransGetSplitList (trans); node; node = node->next) diff --git a/src/register/ledger-core/split-register-control.c b/src/register/ledger-core/split-register-control.c index ad3ce9baf3..96d7d15cfb 100644 --- a/src/register/ledger-core/split-register-control.c +++ b/src/register/ledger-core/split-register-control.c @@ -196,7 +196,8 @@ gnc_split_register_move_cursor (VirtualLocation *p_new_virt_loc, return; info = gnc_split_register_get_info (reg); - pending_trans = xaccTransLookup (&info->pending_trans_guid); + pending_trans = xaccTransLookup (&info->pending_trans_guid, + gnc_get_current_session ()); PINFO ("start callback %d %d \n", new_virt_loc.vcell_loc.virt_row, @@ -545,7 +546,7 @@ gnc_split_register_auto_completion (SplitRegister *reg, VirtualLocation *p_new_virt_loc) { SRInfo *info = gnc_split_register_get_info (reg); - Transaction *pending_trans = xaccTransLookup (&info->pending_trans_guid); + Transaction *pending_trans; Split *blank_split = xaccSplitLookup (&info->blank_split_guid); Transaction *blank_trans = xaccSplitGetParent (blank_split); VirtualLocation new_virt_loc; @@ -556,6 +557,9 @@ gnc_split_register_auto_completion (SplitRegister *reg, BasicCell *cell; Split *split; + pending_trans = xaccTransLookup (&info->pending_trans_guid, + gnc_get_current_session ()); + /* auto-completion is only triggered by a tab out */ if (dir != GNC_TABLE_TRAVERSE_RIGHT) return FALSE; @@ -844,7 +848,8 @@ gnc_split_register_traverse (VirtualLocation *p_new_virt_loc, if (info->first_pass) return FALSE; - pending_trans = xaccTransLookup (&info->pending_trans_guid); + pending_trans = xaccTransLookup (&info->pending_trans_guid, + gnc_get_current_session ()); virt_loc = *p_new_virt_loc; info->exact_traversal = (dir == GNC_TABLE_TRAVERSE_POINTER); diff --git a/src/register/ledger-core/split-register-load.c b/src/register/ledger-core/split-register-load.c index e1e5c0f6b8..b028b56078 100644 --- a/src/register/ledger-core/split-register-load.c +++ b/src/register/ledger-core/split-register-load.c @@ -136,7 +136,7 @@ gnc_split_register_load (SplitRegister *reg, GList * slist, { SRInfo *info = gnc_split_register_get_info (reg); Split *blank_split = xaccSplitLookup (&info->blank_split_guid); - Transaction *pending_trans = xaccTransLookup (&info->pending_trans_guid); + Transaction *pending_trans; CursorBuffer *cursor_buffer; GHashTable *trans_table = NULL; CellBlock *cursor_header; @@ -167,6 +167,9 @@ gnc_split_register_load (SplitRegister *reg, GList * slist, int new_split_row = -1; time_t present; + pending_trans = xaccTransLookup (&info->pending_trans_guid, + gnc_get_current_session ()); + /* make sure we have a blank split */ if (blank_split == NULL) { diff --git a/src/register/ledger-core/split-register.c b/src/register/ledger-core/split-register.c index 2eb5a6512a..83379f5d85 100644 --- a/src/register/ledger-core/split-register.c +++ b/src/register/ledger-core/split-register.c @@ -880,11 +880,14 @@ gnc_split_register_delete_current_split (SplitRegister *reg) { SRInfo *info = gnc_split_register_get_info (reg); Split *blank_split = xaccSplitLookup (&info->blank_split_guid); - Transaction *pending_trans = xaccTransLookup (&info->pending_trans_guid); + Transaction *pending_trans; Transaction *trans; Account *account; Split *split; + pending_trans = xaccTransLookup (&info->pending_trans_guid, + gnc_get_current_session ()); + /* get the current split based on cursor position */ split = gnc_split_register_get_current_split (reg); if (split == NULL) @@ -929,11 +932,14 @@ gnc_split_register_delete_current_trans (SplitRegister *reg) { SRInfo *info = gnc_split_register_get_info (reg); Split *blank_split = xaccSplitLookup (&info->blank_split_guid); - Transaction *pending_trans = xaccTransLookup (&info->pending_trans_guid); + Transaction *pending_trans; Transaction *trans; Account *account; Split *split; + pending_trans = xaccTransLookup (&info->pending_trans_guid, + gnc_get_current_session ()); + /* get the current split based on cursor position */ split = gnc_split_register_get_current_split (reg); if (split == NULL) @@ -996,13 +1002,16 @@ gnc_split_register_emtpy_current_trans (SplitRegister *reg) { SRInfo *info = gnc_split_register_get_info (reg); Split *blank_split = xaccSplitLookup (&info->blank_split_guid); - Transaction *pending_trans = xaccTransLookup (&info->pending_trans_guid); + Transaction *pending_trans; Transaction *trans; Account *account; GList *splits; GList *node; Split *split; + pending_trans = xaccTransLookup (&info->pending_trans_guid, + gnc_get_current_session ()); + /* get the current split based on cursor position */ split = gnc_split_register_get_current_split (reg); if (split == NULL) @@ -1086,13 +1095,16 @@ gnc_split_register_cancel_cursor_split_changes (SplitRegister *reg) void gnc_split_register_cancel_cursor_trans_changes (SplitRegister *reg) { - SRInfo *info = gnc_split_register_get_info(reg); - Transaction *pending_trans = xaccTransLookup(&info->pending_trans_guid); + SRInfo *info = gnc_split_register_get_info (reg); + Transaction *pending_trans; + + pending_trans = xaccTransLookup (&info->pending_trans_guid, + gnc_get_current_session ()); /* Get the currently open transaction, rollback the edits on it, and * then repaint everything. To repaint everything, make a note of * all of the accounts that will be affected by this rollback. */ - if (!xaccTransIsOpen(pending_trans)) + if (!xaccTransIsOpen (pending_trans)) { gnc_split_register_cancel_cursor_split_changes (reg); return; @@ -1309,13 +1321,18 @@ gnc_split_register_save (SplitRegister *reg, gboolean do_commit) { SRInfo *info = gnc_split_register_get_info (reg); Split *blank_split = xaccSplitLookup (&info->blank_split_guid); - Transaction *pending_trans = xaccTransLookup (&info->pending_trans_guid); - Transaction *blank_trans = xaccSplitGetParent (blank_split); + Transaction *pending_trans; + Transaction *blank_trans; Transaction *trans; const char *memo; const char *desc; Split *split; + pending_trans = xaccTransLookup (&info->pending_trans_guid, + gnc_get_current_session ()); + + blank_trans = xaccSplitGetParent (blank_split); + /* get the handle to the current split and transaction */ split = gnc_split_register_get_current_split (reg); trans = gnc_split_register_get_current_trans (reg); @@ -1847,7 +1864,10 @@ gboolean gnc_split_register_changed (SplitRegister *reg) { SRInfo *info = gnc_split_register_get_info (reg); - Transaction *pending_trans = xaccTransLookup (&info->pending_trans_guid); + Transaction *pending_trans; + + pending_trans = xaccTransLookup (&info->pending_trans_guid, + gnc_get_current_session ()); if (reg == NULL) return FALSE; @@ -2187,9 +2207,12 @@ gnc_split_register_cleanup (SplitRegister *reg) { SRInfo *info = gnc_split_register_get_info (reg); Split *blank_split = xaccSplitLookup (&info->blank_split_guid); - Transaction *pending_trans = xaccTransLookup (&info->pending_trans_guid); + Transaction *pending_trans; Transaction *trans; + pending_trans = xaccTransLookup (&info->pending_trans_guid, + gnc_get_current_session ()); + gnc_suspend_gui_refresh (); /* be sure to destroy the "blank split" */