[Gnucash-changes] r13863 - gnucash/trunk/src/register/ledger-core -
More register fixes related to recent changes:
Chris Shoemaker
chris at cvs.gnucash.org
Wed Apr 26 22:18:38 EDT 2006
Author: chris
Date: 2006-04-26 22:18:37 -0400 (Wed, 26 Apr 2006)
New Revision: 13863
Trac: http://svn.gnucash.org/trac/changeset/13863
Modified:
gnucash/trunk/src/register/ledger-core/split-register-control.c
gnucash/trunk/src/register/ledger-core/split-register-load.c
gnucash/trunk/src/register/ledger-core/split-register.c
Log:
More register fixes related to recent changes:
For the autofill in basic-ledger mode, avoid an extra BeginCommit.
For "remove all splits from the transaction" case, also avoid a potential
extra BeginCommit. Also, fix a bug where one split might have not been
removed if this operation was performed in a register other than the one
where the transaction was created.
Make sure that whenever we actually do commit the pending transaction, we
clear the stored GUID *before* the commit, since it may be checked again
from the register's refresh event handler.
In other news, I haven't seen the orphan splits recently...
Modified: gnucash/trunk/src/register/ledger-core/split-register-control.c
===================================================================
--- gnucash/trunk/src/register/ledger-core/split-register-control.c 2006-04-27 01:33:17 UTC (rev 13862)
+++ gnucash/trunk/src/register/ledger-core/split-register-control.c 2006-04-27 02:18:37 UTC (rev 13863)
@@ -214,9 +214,6 @@
return;
info = gnc_split_register_get_info (reg);
- pending_trans = xaccTransLookup (&info->pending_trans_guid,
- gnc_get_current_book ());
-
PINFO ("start callback %d %d \n",
new_virt_loc.vcell_loc.virt_row,
new_virt_loc.vcell_loc.virt_col);
@@ -271,6 +268,8 @@
/* commit the contents of the cursor into the database */
saved = gnc_split_register_save (reg, old_trans != new_trans);
+ pending_trans = xaccTransLookup (&info->pending_trans_guid,
+ gnc_get_current_book ());
if ((old_class == CURSOR_CLASS_SPLIT) &&
old_split &&
(old_split != new_split) &&
@@ -305,11 +304,11 @@
else
{
/* Trans was balanced. Let it go. */
+ info->pending_trans_guid = *guid_null ();
if (xaccTransIsOpen (pending_trans))
xaccTransCommitEdit (pending_trans);
else g_assert_not_reached();
- info->pending_trans_guid = *guid_null ();
pending_trans = NULL;
saved = TRUE;
}
@@ -679,8 +678,19 @@
gnc_suspend_gui_refresh ();
- xaccTransBeginEdit (trans);
+ info->pending_trans_guid = *xaccTransGetGUID(trans);
+ if ((pending_trans != NULL) && (pending_trans != trans)) {
+ if (xaccTransIsOpen (pending_trans))
+ xaccTransCommitEdit (pending_trans);
+ else g_assert_not_reached();
+ g_assert(!xaccTransIsOpen(trans));
+ xaccTransBeginEdit(trans);
+ }
+ g_assert(xaccTransIsOpen(trans));
+ pending_trans = trans;
+
gnc_copy_trans_onto_trans (auto_trans, trans, FALSE, FALSE);
+ blank_split = NULL;
if (gnc_split_register_get_default_account (reg) != NULL)
{
@@ -689,7 +699,6 @@
int i = 0;
default_account = gnc_split_register_get_default_account (reg);
- blank_split = NULL;
while ((s = xaccTransGetSplit(trans, i)) != NULL) {
if (default_account == xaccSplitGetAccount(s))
@@ -700,27 +709,13 @@
}
i++;
}
+ }
- if (blank_split == NULL)
- {
+ if (blank_split == NULL) {
blank_split = xaccTransGetSplit(trans, 0);
info->blank_split_guid = *xaccSplitGetGUID(blank_split);
- }
}
- else
- {
- blank_split = xaccTransGetSplit(trans, 0);
- info->blank_split_guid = *xaccSplitGetGUID(blank_split);
- }
- if ((pending_trans != NULL) && (pending_trans != trans)) {
- if (xaccTransIsOpen (pending_trans))
- xaccTransCommitEdit (pending_trans);
- else g_assert_not_reached();
- }
- pending_trans = trans;
- info->pending_trans_guid = *xaccTransGetGUID (pending_trans);
-
info->blank_split_edited = TRUE;
{
Modified: gnucash/trunk/src/register/ledger-core/split-register-load.c
===================================================================
--- gnucash/trunk/src/register/ledger-core/split-register-load.c 2006-04-27 01:33:17 UTC (rev 13862)
+++ gnucash/trunk/src/register/ledger-core/split-register-load.c 2006-04-27 02:18:37 UTC (rev 13863)
@@ -525,12 +525,12 @@
* from the account. */
if (!found_pending)
{
+ info->pending_trans_guid = *guid_null ();
if (xaccTransIsOpen (pending_trans))
xaccTransCommitEdit (pending_trans);
else if (pending_trans)
g_assert_not_reached();
- info->pending_trans_guid = *guid_null ();
pending_trans = NULL;
}
Modified: gnucash/trunk/src/register/ledger-core/split-register.c
===================================================================
--- gnucash/trunk/src/register/ledger-core/split-register.c 2006-04-27 01:33:17 UTC (rev 13862)
+++ gnucash/trunk/src/register/ledger-core/split-register.c 2006-04-27 02:18:37 UTC (rev 13863)
@@ -1011,6 +1011,7 @@
{
SRInfo *info;
Transaction *trans;
+ Transaction *pending;
int i = 0;
Split *s;
@@ -1018,22 +1019,27 @@
return;
gnc_suspend_gui_refresh ();
+ info = gnc_split_register_get_info(reg);
+ pending = xaccTransLookup(&info->pending_trans_guid, gnc_get_current_book());
- trans = xaccSplitGetParent (split);
- xaccTransBeginEdit (trans);
+ trans = xaccSplitGetParent(split);
+ if (!pending) {
+ g_assert(!xaccTransIsOpen(trans));
+ xaccTransBeginEdit(trans);
+ /* This is now the pending transaction */
+ info->pending_trans_guid = *xaccTransGetGUID(trans);
+ } else if (pending == trans) {
+ g_assert(xaccTransIsOpen(trans));
+ } else g_assert_not_reached();
+
while ((s = xaccTransGetSplit(trans, i)) != NULL) {
if (s != split)
xaccSplitDestroy(s);
- i++;
+ else i++;
}
- /* This is now the pending transaction */
- info = gnc_split_register_get_info (reg);
- g_assert(xaccTransLookup(&info->pending_trans_guid,
- gnc_get_current_book()) == NULL);
- info->pending_trans_guid = *xaccTransGetGUID(trans);
-
gnc_resume_gui_refresh ();
+ gnc_split_register_redraw(reg);
}
void
@@ -1340,7 +1346,9 @@
info->blank_split_guid = *guid_null ();
info->blank_split_edited = FALSE;
}
-
+
+ /* We have to clear the pending guid *before* commiting the
+ trans, because the event handler will find it otherwise. */
if (trans == pending_trans) {
info->pending_trans_guid = *guid_null ();
}
@@ -1349,6 +1357,7 @@
PINFO("commiting trans (%p)", trans);
xaccTransCommitEdit(trans);
}
+
return TRUE;
}
@@ -1373,6 +1382,7 @@
// FIXME: How could the pending transaction not be open?
// FIXME: For that matter, how could an open pending
// transaction ever not be the current trans?
+ info->pending_trans_guid = *xaccTransGetGUID(trans);
if (xaccTransIsOpen (pending_trans)) {
g_message("Impossible? commiting pending %p", pending_trans);
xaccTransCommitEdit (pending_trans);
@@ -1387,7 +1397,6 @@
xaccTransBeginEdit (trans);
}
pending_trans = trans;
- info->pending_trans_guid = *xaccTransGetGUID(trans);
}
/* If we are committing the blank split, add it to the account now */
@@ -1465,12 +1474,12 @@
if (do_commit)
{
g_assert(trans == blank_trans || trans == pending_trans);
- xaccTransCommitEdit (trans);
if (pending_trans == trans)
{
pending_trans = NULL;
info->pending_trans_guid = *guid_null ();
}
+ xaccTransCommitEdit (trans);
}
gnc_table_clear_current_cursor_changes (reg->table);
@@ -2380,6 +2389,7 @@
if (pending_trans != NULL)
{
g_assert_not_reached();
+ info->pending_trans_guid = *guid_null ();
/* CAS: It's not clear to me that we'd really want to commit
here, rather than rollback. But, maybe this is just dead
code. */
@@ -2387,7 +2397,6 @@
xaccTransCommitEdit (pending_trans);
else g_assert_not_reached();
- info->pending_trans_guid = *guid_null ();
pending_trans = NULL;
}
More information about the gnucash-changes
mailing list