[Gnucash-changes] r13132 - gnucash/trunk/src/engine - Keep QOF aware of the dirty-state of Transactions.

Chris Shoemaker chris at cvs.gnucash.org
Mon Feb 6 12:57:46 EST 2006


Author: chris
Date: 2006-02-06 12:57:45 -0500 (Mon, 06 Feb 2006)
New Revision: 13132
Trac: http://svn.gnucash.org/trac/changeset/13132

Modified:
   gnucash/trunk/src/engine/Transaction.c
Log:
   Keep QOF aware of the dirty-state of Transactions.
   Also, dirty transactions upon changing due date and read-only status, 
   which didn't used to happen.


Modified: gnucash/trunk/src/engine/Transaction.c
===================================================================
--- gnucash/trunk/src/engine/Transaction.c	2006-02-06 17:12:39 UTC (rev 13131)
+++ gnucash/trunk/src/engine/Transaction.c	2006-02-06 17:57:45 UTC (rev 13132)
@@ -1044,6 +1044,7 @@
     split->parent = trans;
     trans->splits = g_list_append (trans->splits, split);
   }
+  qof_instance_set_dirty(QOF_INSTANCE(trans));
   xaccTransCommitEdit(trans);
   gnc_engine_resume_events();
 
@@ -1630,6 +1631,7 @@
     }
   }
 
+  qof_instance_set_dirty(QOF_INSTANCE(trans));
   mark_trans (trans);
   qof_commit_edit(QOF_INSTANCE(trans));
 }
@@ -2088,6 +2090,7 @@
   return trans ? (0 < trans->inst.editlevel) : FALSE;
 }
 
+/* Only used by postgres backend. Not sure if they should dirty the trans. */
 void
 xaccTransSetVersion (Transaction *trans, gint32 vers)
 {
@@ -2109,8 +2112,10 @@
 static void
 xaccTransRemoveSplit (Transaction *trans, const Split *split) 
 {
-  if (trans)
-      trans->splits = g_list_remove (trans->splits, split);
+    if (trans) {
+        trans->splits = g_list_remove (trans->splits, split);
+        qof_instance_set_dirty(QOF_INSTANCE(trans));
+    }
 }
 
 /********************************************************************\
@@ -2180,6 +2185,7 @@
    /* Now, insert the split into the array */
    split->parent = trans;
    trans->splits = g_list_append (trans->splits, split);
+   qof_instance_set_dirty(QOF_INSTANCE(trans));
 
    /* Convert the split to the new transaction's commodity denominator */
    /* If the denominator can't be exactly converted, it's an error */
@@ -2495,6 +2501,7 @@
            ctime (({time_t secs = (time_t) val.tv_sec; &secs;})));
     
     *dadate = val;
+    qof_instance_set_dirty(QOF_INSTANCE(trans));
     mark_trans(trans);
     qof_commit_edit(QOF_INSTANCE(trans));
 
@@ -2585,7 +2592,10 @@
 xaccTransSetDateDueTS (Transaction *trans, const Timespec *ts)
 {
    if (!trans || !ts) return;
+   qof_begin_edit(QOF_INSTANCE(trans));
    kvp_frame_set_timespec (trans->inst.kvp_data, TRANS_DATE_DUE_KVP, *ts);
+   qof_instance_set_dirty(QOF_INSTANCE(trans));
+   qof_commit_edit(QOF_INSTANCE(trans));
 }
 
 void
@@ -2595,22 +2605,31 @@
   g_return_if_fail(trans);
   if (!qof_begin_edit(&trans->inst)) return;
   kvp_frame_set_str (trans->inst.kvp_data, TRANS_TXN_TYPE_KVP, s);
+  qof_instance_set_dirty(QOF_INSTANCE(trans));
   qof_commit_edit(&trans->inst);
 }
 
 void xaccTransClearReadOnly (Transaction *trans)
 {
-   if (trans)
-       kvp_frame_set_slot_path (trans->inst.kvp_data, NULL, 
-                                TRANS_READ_ONLY_REASON, NULL);
+    if (trans) {
+        qof_begin_edit(QOF_INSTANCE(trans));
+        kvp_frame_set_slot_path (trans->inst.kvp_data, NULL, 
+                                 TRANS_READ_ONLY_REASON, NULL);
+        qof_instance_set_dirty(QOF_INSTANCE(trans));
+        qof_commit_edit(QOF_INSTANCE(trans));
+    }
 }
 
 void
 xaccTransSetReadOnly (Transaction *trans, const char *reason)
 {
-   if (trans && reason)
-       kvp_frame_set_str (trans->inst.kvp_data, 
-                          TRANS_READ_ONLY_REASON, reason);
+    if (trans && reason) {
+        qof_begin_edit(QOF_INSTANCE(trans));
+        kvp_frame_set_str (trans->inst.kvp_data, 
+                           TRANS_READ_ONLY_REASON, reason);
+        qof_instance_set_dirty(QOF_INSTANCE(trans));
+        qof_commit_edit(QOF_INSTANCE(trans));
+    }
 }
 
 /********************************************************************\
@@ -2633,6 +2652,7 @@
    qof_begin_edit(QOF_INSTANCE(trans));
 
    CACHE_REPLACE(trans->num, xnum);
+   qof_instance_set_dirty(QOF_INSTANCE(trans));
    qof_commit_edit(QOF_INSTANCE(trans));
 }
 
@@ -2651,6 +2671,7 @@
    qof_begin_edit(QOF_INSTANCE(trans));
 
    CACHE_REPLACE(trans->description, desc);
+   qof_instance_set_dirty(QOF_INSTANCE(trans));
    qof_commit_edit(QOF_INSTANCE(trans));
 }
 
@@ -2669,6 +2690,7 @@
   qof_begin_edit(QOF_INSTANCE(trans));
 
   kvp_frame_set_str (trans->inst.kvp_data, trans_notes_str, notes);
+  qof_instance_set_dirty(QOF_INSTANCE(trans));
   qof_commit_edit(QOF_INSTANCE(trans));
 }
 
@@ -3255,6 +3277,7 @@
     xaccSplitSetReconcile(split, VREC);
   }
 
+  /* Dirtying taken care of by SetReadOnly */
   xaccTransSetReadOnly(trans, _("Transaction Voided"));
   xaccTransCommitEdit(trans);
 }
@@ -3340,6 +3363,7 @@
     xaccSplitSetReconcile(split, NREC);
   }
 
+  /* Dirtying taken care of by ClearReadOnly */
   xaccTransClearReadOnly(trans);
   xaccTransCommitEdit(trans);
 }
@@ -3365,6 +3389,8 @@
     xaccSplitSetDateReconciledSecs (split, 0);
   }
 
+  if (trans->splits)
+      qof_instance_set_dirty(QOF_INSTANCE(trans));
   xaccTransCommitEdit(trans);
 }
 
@@ -3506,8 +3532,8 @@
   create:              (gpointer)xaccMallocTransaction,
   book_begin:          NULL,
   book_end:            NULL,
-  is_dirty:            NULL,
-  mark_clean:          NULL,
+  is_dirty:            qof_collection_is_dirty,
+  mark_clean:          qof_collection_mark_clean,
   foreach:             qof_collection_foreach,
   printable:           (const char* (*)(gpointer)) xaccTransGetDescription,
   version_cmp:         (int (*)(gpointer,gpointer)) qof_instance_version_cmp,



More information about the gnucash-changes mailing list