This includes the now semi-functional postgres backend.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@14198 57a11ea4-9604-0410-9ed3-97b8803252fd
Guile 1.8 automatically shares strings as copy-on-write and no longer
provides the "make-shared-substring" procedure.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@14159 57a11ea4-9604-0410-9ed3-97b8803252fd
tree-view columns. There is now a per-column setting, "DEFAULT_VISIBLE",
similar to "ALWAYS_VISIBLE", that controls the visibility of a column in
the absence of, or prior to, gconf management.
It is no longer necessary for the tree view to store a list of column names
for default visible columns.
To faciliate the adaptation of pre-existing tree-views, the
view_column_find_by_name() has been publicized as
gnc_tree_view_find_column_by_name().
All callers of gnc_tree_view_configure_columns() have been converted to use
the DEFAULT_VISIBLE column property.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@14037 57a11ea4-9604-0410-9ed3-97b8803252fd
that all datum portions of case-statement clauses be unique. The syntax:
'foo expands to a list of two symbols: (quote foo)
If both 'foo and 'bar are used, then the "quote" symbol won't be unique.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@14034 57a11ea4-9604-0410-9ed3-97b8803252fd
When handling the focus-out event for a GtkCellEditable, it's important
not to keep the editable alive for too long, because the cursor-blink
timeout expects that the editable still has the focus. The easiest way to
do this is to stop the editing immediately by calling
gtk_cell_editable_editing_done() and then handle all the real work from
the "editing-done" signal handler.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@14027 57a11ea4-9604-0410-9ed3-97b8803252fd
dirtying the book implicitly without setting any time of first change.
Instead, make sure that committed Splits dirty their parent Transaction.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13958 57a11ea4-9604-0410-9ed3-97b8803252fd
committed at least once in its lifecycle. Then, we can mark the collection
dirty whenever an object is committed, except for the special case of an
QofInstance that has never been committed before and is now being deleted.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13957 57a11ea4-9604-0410-9ed3-97b8803252fd
macro version), in case we ever want qof_commit_edit() to actually do
something with a backend.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13956 57a11ea4-9604-0410-9ed3-97b8803252fd
instead of qof_backend_run_begin().
Minor cleanups of qof_commit_edit() and qof_begin_edit().
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13955 57a11ea4-9604-0410-9ed3-97b8803252fd
a cloned Split to the Lot. Make sure to remove the Split from the Lot when
deleting a Split. (This prevents use-after-free by test-lots.) Add some
comments to some strange code that's possibly wrong.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13922 57a11ea4-9604-0410-9ed3-97b8803252fd
cap-gains.c to Transaction.c.
Fix a logic error where "split->gains |= ~GAINS_STATUS_ADIRTY" was supposed
to be "split->gains &= ~GAINS_STATUS_ADIRTY".
Disable the loop-restart code in xaccTransScrubGainsDate() because I think
the state changes inside the loop will never cause a previously-skipped
Split to be not skipped during another pass.
Incidental:
make both xaccTransFindSplitByAccount() arguments 'const'
Internalize Begin/Commit edit block into xaccTransScrubSplits()
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13921 57a11ea4-9604-0410-9ed3-97b8803252fd
Add new function xaccTransGetReversedBy() to find the reversing transaction
if there is one.
This also ensures that the KVP changes are inside a Begin/Commit block.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13916 57a11ea4-9604-0410-9ed3-97b8803252fd
effect immediately by commiting the transaction if it's open.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13883 57a11ea4-9604-0410-9ed3-97b8803252fd
added to the Account if their open Transaction is commited.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13874 57a11ea4-9604-0410-9ed3-97b8803252fd
Early exit the budget keynav function on no-op case.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13864 57a11ea4-9604-0410-9ed3-97b8803252fd
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...
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13863 57a11ea4-9604-0410-9ed3-97b8803252fd
Simplify the control flow around the code in gnc_split_register_save() that
decides what transactions to commit and when. Be sure to commit the
blank transaction even when it's not the pending transaction. Refresh the
register after transaction rollback.
Add more assertions that will either fail in some case I haven't tested or
prove that more register code is unreachable.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13844 57a11ea4-9604-0410-9ed3-97b8803252fd
When saving the register state, don't commit an open transaction unless
we think it was opened from this register.
These changes are intended to fix bug #327780. I've also added several
related assertions. If any of these assertions fail, it may indicate that
I don't really understand what's going on, and that this may not be the
correct fix for #327780.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13834 57a11ea4-9604-0410-9ed3-97b8803252fd
transactional.
Convert some Split function calls to the xaccSplit... form.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13833 57a11ea4-9604-0410-9ed3-97b8803252fd
This is what I actually intended in r13130, but we want the stuff that
xaccTransCommitEdit provides over-and-above what qof_commit_edit provides.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13830 57a11ea4-9604-0410-9ed3-97b8803252fd
Instead, call gnc:accountlist-get-comm-balance-at-date when we really just
want the balance at one date.
This fixes the retained-earnings calculation on the balance sheet report.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13790 57a11ea4-9604-0410-9ed3-97b8803252fd
Split un-destruction) and Split re-parenting.
All these actions now generate ITEM-REMOVED or ITEM-ADDED events for
related Transactions (as appropriate).
Minor: allow xaccSplitSetParent() to accept a NULL argument in order to use
it in the rollback-newly-created-split case.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13767 57a11ea4-9604-0410-9ed3-97b8803252fd
Enable emission of some new Split events.
Use xaccSplitRollbackEdit() in implementation of xaccTransRollbackEdit().
Avoid rollback of Splits not owned by the Transaction. This was actually
impossible to encounter, but the algorithm is now correct even for some
cases that aren't permitted by other code.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13766 57a11ea4-9604-0410-9ed3-97b8803252fd
Fixes random crashes demonstrated by test-xml-commodities.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13737 57a11ea4-9604-0410-9ed3-97b8803252fd
Use shorter strings for commodity mnemonics.
Ensure that test splits amount and value have the same sign.
Avoid numerical overflow in rate calculation when generating test splits.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13718 57a11ea4-9604-0410-9ed3-97b8803252fd
choose which reports (if any) to open. If the user cancels the dialog,
no reports are opened, otherwise, for each report, they are asked whether
or not they want to open it. However, if there are less than 4 reports
the dialog is skipped and the reports are just opened. Closes bug#335188.
Note: if someone implements a solution that opened only precisely the
reports that were left open in 1.8.x, it's fine to remove this extra code.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13694 57a11ea4-9604-0410-9ed3-97b8803252fd
dialog-transfer.c. Added a warning to find more bugs like this one.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13607 57a11ea4-9604-0410-9ed3-97b8803252fd
the group, but delay the nulling of the account's group pointer until after
the generation of the remove event. That way, the tree model can verify
that the removed account's root is the same as the root for the model.
Also, in the model's event handler, check that accounts are in the same book
as the model is for.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13601 57a11ea4-9604-0410-9ed3-97b8803252fd
is different than that of setenv(). Also, convert last remaining uses of
setenv() to g_setenv().
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13594 57a11ea4-9604-0410-9ed3-97b8803252fd
This isolates the amount-to-value conversion algorithm from the register.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13576 57a11ea4-9604-0410-9ed3-97b8803252fd
This happens already in xaccAccountCommitEdit() and if the Account isn't
being edited, then we inserted the Split in sorted order anyway.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13498 57a11ea4-9604-0410-9ed3-97b8803252fd
index and count reflective of any in-progress edit.
Convert some split iterators from directly using the GList of Splits to
using xaccTransGetSplit().
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13487 57a11ea4-9604-0410-9ed3-97b8803252fd
In contrast to the previous looping construct, this will work even if
the split operations don't have side-effects on the split lists.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13476 57a11ea4-9604-0410-9ed3-97b8803252fd
transaction. This makes it easier to safely iterate over a split list.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13471 57a11ea4-9604-0410-9ed3-97b8803252fd
Pass the *old* parent transaction (since the Split may be moving into
a new transaction) and the old index of the Split in the old Transaction's
list of Splits.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13468 57a11ea4-9604-0410-9ed3-97b8803252fd
(Actually, xaccAccountInsertSplit is #def'd to xaccSplitSetAccount().)
Accounts no longer manage their Split lists. The Account split lists
should only ever be modified from within xaccTransCommitEdit(). This
simplifies some of the operations on Accounts, since they can now be
expressed in terms of operations on Splits.
Also, the consolidation of two operations (RemoveSplit and InsertSplit)
into one operation (xaccSplitSetAccount) means that it's no longer
possible to orphan a Split.
Incidental:
Fix a leak of a KVP frame.
Don't recompute the account balance if we're shutting down.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13462 57a11ea4-9604-0410-9ed3-97b8803252fd
Broken out just for clarity.
Note: There's one piece that I didn't change that I think is conceptually
awkward. It has to do with how/when we would discover that another
user has deleted the transaction we're currently editing. I think it makes
more sense to detect and handle this case in xaccTransCommitEdit() instead
of xaccTransRollbackEdit(), because (a) we don't actually have to do the
rollback if we just destroy the trans, (b) some rollbacks are not backend-
induced, but rather voluntary, (c) we need a generalized mechanism
anyway for detecting and handling deleted transactions even when
we're not editing them.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13461 57a11ea4-9604-0410-9ed3-97b8803252fd
One simplification in xaccTransScrubImbalance() to always find the root
AccountGroup from the Transaction's book.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13460 57a11ea4-9604-0410-9ed3-97b8803252fd
edit-blocks should work, and why.
Converts the very important xaccTransCommitEdit function to use the
qof_commit_edit_part2() function instead of something that is 90%
similar.
Transactions have a Split list that keeps track of Splits during the edit.
During edits, this list only grows and never shrinks. Splits that
have been destroyed or reparented to other transactions remain in
the list, along with pre-edit Splits and newly added Splits. Only after a
successful commit does the Split list drop reparented or destroyed
Splits. A couple out-of-engine users (mainly the register) call
xaccTransGetSplitList() an work from the Transaction's split list,
but they expect to be working with only the Splits that would still be in
the Transaction if the in-progress edit would be committed. So, we
provide the function xaccTransStillHasSplit(t, s) to allow users to query
the in-edit state of the Transaction's Split list.
xaccTransRemoveSplit() and xaccTransInsertSplit() have been replaced by
xaccSplitSetParent().
The new xaccTransCommitEdit tries to take a more conservative approach
to event generation, too. Instead of generating every possible event for
any commit, it should generate only events that indicate a change to an
engine object or relation.
Move some of the financial-constraint-enforcing functions closer to the
relevant data-structures. (from Scrub.c)
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13459 57a11ea4-9604-0410-9ed3-97b8803252fd
The engine used to have functions that made it possible to orphan a Split.
As this is no longer possible, we can't test anymore.
Incidental:
Fix three or four small leaks in the test functions.
Allow test-period to be randomized based on optional command-line arg.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13458 57a11ea4-9604-0410-9ed3-97b8803252fd
The Split <-> Account and Split <-> Transaction relationships are now
treated as properties of the Split. In terms of the BeginEdit/CommitEdit
block, Splits are subordinate to Transactions. There is no public
BeginEdit/CommitEdit block for Splits; changes to Splits should be wrapped
in their Transaction's Edit-block.
In the case of the Split <-> Account relationship, the call to
xaccSplitSetAccount() will be immediately visible from
xaccSplitGetAccount(), but the Account does not learn about the
Split until and if the edit is committed.
In the case of the Split <-> Transaction relationship, calling
xaccSplitSetParent() will immediately add the Split to the
Transactions split list. This is because the Split's Transaction
owns the reference to the Split. However, see the Transaction.c
patch for how to distinguish pre-edit state from in-edit state.
In both cases, events are not generated until the edits are committed.
Most of this new logic is in an engine-private helper xaccSplitCommitEdit(),
which is called from xaccTransCommitEdit().
Incidental:
Increased error-checking in xaccSplitSetValue().
Internalize a Transaction Begin/Commit edit-block in every setter func.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13457 57a11ea4-9604-0410-9ed3-97b8803252fd
gnc:transaction-map-splits, both unused.
Remove g-wrapped versions of functions being removed:
gnc:account-fix-split-date-order,
gnc:trans-fix-split-date-order
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@13456 57a11ea4-9604-0410-9ed3-97b8803252fd