mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
additions to allow gui to rollback the enire transaction,
not just an individual split line. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@1249 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
5aff12d808
commit
c259ccdfa5
@ -208,10 +208,11 @@ printf ("leave LedgerTraverse with %d \n", reg->cursor_phys_row);
|
||||
static void
|
||||
LedgerDestroy (SplitRegister *reg)
|
||||
{
|
||||
Transaction *trans;
|
||||
|
||||
/* be sure to destroy the "blank split" */
|
||||
if (reg->user_hook) {
|
||||
Split *split;
|
||||
Transaction *trans;
|
||||
|
||||
split = (Split *) (reg->user_hook);
|
||||
|
||||
@ -223,6 +224,19 @@ LedgerDestroy (SplitRegister *reg)
|
||||
xaccTransCommitEdit (trans);
|
||||
reg->user_hook = NULL;
|
||||
}
|
||||
|
||||
/* be sure to take care of any open transactions */
|
||||
if (reg->user_huck) {
|
||||
trans = (Transaction *) (reg->user_huck);
|
||||
|
||||
/* I suppose we could also rollback here ... its not clear what
|
||||
* the desirable behaviour should be from the user's point of view
|
||||
* when they close a window with an uncommitted edit in it ...
|
||||
* Maybe we should prompt them ??
|
||||
*/
|
||||
xaccTransCommitEdit (trans);
|
||||
reg->user_huck = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* ======================================================== */
|
||||
@ -284,7 +298,7 @@ void
|
||||
xaccSRSaveRegEntry (SplitRegister *reg)
|
||||
{
|
||||
Split *split;
|
||||
Transaction *trans;
|
||||
Transaction *trans, *oldtrans;
|
||||
Account * acc;
|
||||
unsigned int changed;
|
||||
int style;
|
||||
@ -327,8 +341,15 @@ printf ("save split is %p \n", split);
|
||||
}
|
||||
trans = xaccSplitGetParent (s);
|
||||
|
||||
/* determine whether we should commit the previous edit */
|
||||
oldtrans = (Transaction *) (reg->user_huck);
|
||||
if (oldtrans != trans) {
|
||||
xaccTransCommitEdit (oldtrans);
|
||||
xaccTransBeginEdit (trans, 0);
|
||||
reg->user_huck = (void *) trans;
|
||||
}
|
||||
|
||||
split = xaccMallocSplit ();
|
||||
xaccTransBeginEdit (trans, 0);
|
||||
xaccTransAppendSplit (trans, split);
|
||||
|
||||
if (force_double_entry_awareness) {
|
||||
@ -341,7 +362,14 @@ printf ("save split is %p \n", split);
|
||||
|
||||
} else {
|
||||
trans = xaccSplitGetParent (split);
|
||||
xaccTransBeginEdit (trans, 0);
|
||||
|
||||
/* determine whether we should commit the previous edit */
|
||||
oldtrans = (Transaction *) (reg->user_huck);
|
||||
if (oldtrans != trans) {
|
||||
xaccTransCommitEdit (oldtrans);
|
||||
xaccTransBeginEdit (trans, 0);
|
||||
reg->user_huck = (void *) trans;
|
||||
}
|
||||
}
|
||||
|
||||
/* copy the contents from the cursor to the split */
|
||||
@ -459,8 +487,6 @@ printf ("save split is %p \n", split);
|
||||
xaccSplitSetValue (split, (reg->valueCell->amount));
|
||||
}
|
||||
|
||||
xaccTransCommitEdit (trans);
|
||||
|
||||
printf ("finished saving split %s of trans %s \n",
|
||||
xaccSplitGetMemo(split),
|
||||
xaccTransGetDescription(trans));
|
||||
|
@ -571,6 +571,7 @@ xaccInitSplitRegister (SplitRegister *reg, int type)
|
||||
|
||||
reg->user_hook = NULL;
|
||||
reg->user_hack = NULL;
|
||||
reg->user_huck = NULL;
|
||||
reg->destroy = NULL;
|
||||
reg->type = type;
|
||||
|
||||
@ -771,6 +772,7 @@ xaccDestroySplitRegister (SplitRegister *reg)
|
||||
reg->destroy = NULL;
|
||||
reg->user_hook = NULL;
|
||||
reg->user_hack = NULL;
|
||||
reg->user_huck = NULL;
|
||||
|
||||
xaccDestroyTable (reg->table);
|
||||
reg->table = NULL;
|
||||
|
@ -158,13 +158,14 @@ struct _SplitRegister {
|
||||
short num_virt_rows;
|
||||
short cursor_phys_row;
|
||||
short cursor_virt_row;
|
||||
void * user_hack;
|
||||
|
||||
BasicCell *header_label_cells[NUM_CELLS];
|
||||
|
||||
/* user_hook allows users of this object to hang
|
||||
* private data onto it */
|
||||
void *user_hook;
|
||||
void *user_hack;
|
||||
void *user_huck;
|
||||
|
||||
/* The destroy callback gives user's a chance
|
||||
* to free up any associated user_hook data */
|
||||
|
Loading…
Reference in New Issue
Block a user