gnucash stable: Multiple changes pushed

Christopher Lam clam at code.gnucash.org
Tue Jul 1 20:21:43 EDT 2025


Updated	 via  https://github.com/Gnucash/gnucash/commit/e28f314d (commit)
	 via  https://github.com/Gnucash/gnucash/commit/0cea3725 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/ed4f72f3 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/72869a39 (commit)
	from  https://github.com/Gnucash/gnucash/commit/e7f05b9b (commit)



commit e28f314d436846881aa1421656ce66dada68fed3
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Mon Jun 23 22:17:38 2025 +0800

    [Split.cpp] use qof_instance kvp API for gnc_numeric

diff --git a/libgnucash/engine/Split.cpp b/libgnucash/engine/Split.cpp
index 9acf0e9240..d2b6892bc9 100644
--- a/libgnucash/engine/Split.cpp
+++ b/libgnucash/engine/Split.cpp
@@ -2115,64 +2115,43 @@ xaccSplitGetOtherSplit (const Split *split)
 gnc_numeric
 xaccSplitVoidFormerAmount(const Split *split)
 {
-    GValue v = G_VALUE_INIT;
-    gnc_numeric *num = nullptr;
-    gnc_numeric retval;
     g_return_val_if_fail(split, gnc_numeric_zero());
-    qof_instance_get_kvp (QOF_INSTANCE (split), &v, 1, void_former_amt_str);
-    if (G_VALUE_HOLDS_BOXED (&v))
-        num = (gnc_numeric*)g_value_get_boxed (&v);
-    retval = num ? *num : gnc_numeric_zero();
-    g_value_unset (&v);
-    return retval;
+    auto num{qof_instance_get_path_kvp<gnc_numeric> (QOF_INSTANCE(split), {void_former_amt_str})};
+    return num ? *num : gnc_numeric_zero();
 }
 
 gnc_numeric
 xaccSplitVoidFormerValue(const Split *split)
 {
-    GValue v = G_VALUE_INIT;
-    gnc_numeric *num = nullptr;
-    gnc_numeric retval;
     g_return_val_if_fail(split, gnc_numeric_zero());
-    qof_instance_get_kvp (QOF_INSTANCE (split), &v, 1, void_former_val_str);
-    if (G_VALUE_HOLDS_BOXED (&v))
-        num = (gnc_numeric*)g_value_get_boxed (&v);
-    retval = num ? *num : gnc_numeric_zero();
-    g_value_unset (&v);
-    return retval;
+    auto num{qof_instance_get_path_kvp<gnc_numeric> (QOF_INSTANCE(split), {void_former_val_str})};
+    return num ? *num : gnc_numeric_zero();
 }
 
 void
 xaccSplitVoid(Split *split)
 {
-    gnc_numeric zero = gnc_numeric_zero(), num;
-    GValue v = G_VALUE_INIT;
+    g_return_if_fail (GNC_IS_SPLIT(split));
+    qof_instance_set_path_kvp<gnc_numeric> (QOF_INSTANCE(split), xaccSplitGetAmount(split), {void_former_amt_str});
+    qof_instance_set_path_kvp<gnc_numeric> (QOF_INSTANCE(split), xaccSplitGetValue(split), {void_former_val_str});
+    qof_instance_set_dirty (QOF_INSTANCE(split));
 
-    g_value_init (&v, GNC_TYPE_NUMERIC);
-    num =  xaccSplitGetAmount(split);
-    g_value_set_boxed (&v, &num);
-    qof_instance_set_kvp (QOF_INSTANCE (split), &v, 1, void_former_amt_str);
-    g_value_reset (&v);
-    num =  xaccSplitGetValue(split);
-    g_value_set_boxed (&v, &num);
-    qof_instance_set_kvp (QOF_INSTANCE (split), &v, 1, void_former_val_str);
-
-    /* Marking dirty handled by SetAmount etc. */
+    static gnc_numeric zero = gnc_numeric_zero();
     xaccSplitSetAmount (split, zero);
     xaccSplitSetValue (split, zero);
     xaccSplitSetReconcile(split, VREC);
-    g_value_unset (&v);
 }
 
 void
 xaccSplitUnvoid(Split *split)
 {
+    g_return_if_fail (GNC_IS_SPLIT(split));
     xaccSplitSetAmount (split, xaccSplitVoidFormerAmount(split));
     xaccSplitSetValue (split, xaccSplitVoidFormerValue(split));
     xaccSplitSetReconcile(split, NREC);
-    qof_instance_set_kvp (QOF_INSTANCE (split), nullptr, 1, void_former_amt_str);
-    qof_instance_set_kvp (QOF_INSTANCE (split), nullptr, 1, void_former_val_str);
-    qof_instance_set_dirty (QOF_INSTANCE (split));
+    qof_instance_set_path_kvp<gnc_numeric> (QOF_INSTANCE(split), {}, {void_former_amt_str});
+    qof_instance_set_path_kvp<gnc_numeric> (QOF_INSTANCE(split), {}, {void_former_val_str});
+    qof_instance_set_dirty (QOF_INSTANCE(split));
 }
 
 /********************************************************************\

commit 0cea3725a1b370a396be65643e09ba3b4419235b
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Tue Jun 24 18:22:06 2025 +0800

    [Split.cpp] use qof_instance kvp API for const char*

diff --git a/libgnucash/engine/Split.cpp b/libgnucash/engine/Split.cpp
index 64d982214e..9acf0e9240 100644
--- a/libgnucash/engine/Split.cpp
+++ b/libgnucash/engine/Split.cpp
@@ -1977,22 +1977,16 @@ xaccSplitGetType(const Split *s)
 {
     if (!s) return nullptr;
 
-    GValue v = G_VALUE_INIT;
-    const char* type;
-    qof_instance_get_kvp (QOF_INSTANCE (s), &v, 1, "split-type");
-    type = G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : nullptr;
-    const char *rv;
-    if (!type || !g_strcmp0 (type, split_type_normal))
-        rv = split_type_normal;
-    else if (!g_strcmp0 (type, split_type_stock_split))
-        rv = split_type_stock_split;
-    else
-    {
-        PERR ("unexpected split-type %s, reset to normal.", type);
-        rv = split_type_normal;
-    }
-    g_value_unset (&v);
-    return rv;
+    auto type{qof_instance_get_path_kvp<const char*> (QOF_INSTANCE(s), {"split-type"})};
+
+    if (!type || !g_strcmp0 (*type, split_type_normal))
+        return split_type_normal;
+
+    if (!g_strcmp0 (*type, split_type_stock_split))
+        return split_type_stock_split;
+
+    PERR ("unexpected split-type %s, reset to normal.", *type);
+    return split_type_normal;
 }
 
 /* reconfigure a split to be a stock split - after this, you shouldn't
@@ -2000,18 +1994,15 @@ xaccSplitGetType(const Split *s)
 void
 xaccSplitMakeStockSplit(Split *s)
 {
-    GValue v = G_VALUE_INIT;
     xaccTransBeginEdit (s->parent);
 
     s->value = gnc_numeric_zero();
-    g_value_init (&v, G_TYPE_STRING);
-    g_value_set_static_string (&v, split_type_stock_split);
-    qof_instance_set_kvp (QOF_INSTANCE (s), &v, 1, "split-type");
+    qof_instance_set_path_kvp<const char*> (QOF_INSTANCE(s), g_strdup(split_type_stock_split),
+                                            {"split-type"});
     SET_GAINS_VDIRTY(s);
     mark_split(s);
     qof_instance_set_dirty(QOF_INSTANCE(s));
     xaccTransCommitEdit(s->parent);
-    g_value_unset (&v);
 }
 
 void

commit ed4f72f3a72b99f72efa1577512d19c78611a8cd
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Wed Jun 25 09:27:00 2025 +0800

    [gnc-lot.cpp] use qof_instance kvp API for const char*

diff --git a/libgnucash/engine/gnc-lot.cpp b/libgnucash/engine/gnc-lot.cpp
index 1ee3eedf00..8b83efbbac 100644
--- a/libgnucash/engine/gnc-lot.cpp
+++ b/libgnucash/engine/gnc-lot.cpp
@@ -446,12 +446,8 @@ gnc_lot_get_title (const GNCLot *lot)
 {
     if (!lot) return nullptr;
 
-    GValue v = G_VALUE_INIT;
-    qof_instance_get_kvp (QOF_INSTANCE (lot), &v, 1, "title");
-    const char *rv = G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : nullptr;
-    g_value_unset (&v);
-
-    return rv;
+    auto str{qof_instance_get_path_kvp<const char*> (QOF_INSTANCE (lot), {"title"})};
+    return str ? *str : nullptr;
 }
 
 const char *
@@ -459,41 +455,30 @@ gnc_lot_get_notes (const GNCLot *lot)
 {
     if (!lot) return nullptr;
 
-    GValue v = G_VALUE_INIT;
-    qof_instance_get_kvp (QOF_INSTANCE (lot), &v, 1, "notes");
-    const char *rv = G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : nullptr;
-    g_value_unset (&v);
-    return rv;
+    auto str{qof_instance_get_path_kvp<const char*> (QOF_INSTANCE (lot), {"notes"})};
+    return str ? *str : nullptr;
 }
 
 void
 gnc_lot_set_title (GNCLot *lot, const char *str)
 {
-    GValue v = G_VALUE_INIT;
     if (!lot) return;
 
     qof_begin_edit(QOF_INSTANCE(lot));
-    g_value_init (&v, G_TYPE_STRING);
-    g_value_set_static_string (&v, str);
-    qof_instance_set_kvp (QOF_INSTANCE (lot), &v, 1, "title");
+    qof_instance_set_path_kvp<const char*> (QOF_INSTANCE (lot), g_strdup(str), {"title"});
     qof_instance_set_dirty(QOF_INSTANCE(lot));
     gnc_lot_commit_edit(lot);
-    g_value_unset (&v);
 }
 
 void
 gnc_lot_set_notes (GNCLot *lot, const char *str)
 {
-    GValue v = G_VALUE_INIT;
     if (!lot) return;
 
     qof_begin_edit(QOF_INSTANCE(lot));
-    g_value_init (&v, G_TYPE_STRING);
-    g_value_set_static_string (&v, str);
-    qof_instance_set_kvp (QOF_INSTANCE (lot), &v, 1, "notes");
+    qof_instance_set_path_kvp<const char*> (QOF_INSTANCE (lot), g_strdup(str), {"notes"});
     qof_instance_set_dirty(QOF_INSTANCE(lot));
     gnc_lot_commit_edit(lot);
-    g_value_unset (&v);
 }
 
 /* ============================================================= */

commit 72869a393d9860e853ea00331bb1f7885726081a
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Wed Jun 25 09:38:56 2025 +0800

    [gnc-commodity.cpp] use qof_instance kvp API for const char*

diff --git a/libgnucash/engine/gnc-commodity.cpp b/libgnucash/engine/gnc-commodity.cpp
index 45263024a3..757f48035b 100644
--- a/libgnucash/engine/gnc-commodity.cpp
+++ b/libgnucash/engine/gnc-commodity.cpp
@@ -1016,16 +1016,9 @@ gnc_commodity_get_fraction(const gnc_commodity * cm)
 gboolean
 gnc_commodity_get_auto_quote_control_flag(const gnc_commodity *cm)
 {
-    GValue v = G_VALUE_INIT;
-    gboolean retval = TRUE;
-
     if (!cm) return FALSE;
-    qof_instance_get_kvp (QOF_INSTANCE (cm), &v, 1, "auto_quote_control");
-    if (G_VALUE_HOLDS_STRING (&v) &&
-        strcmp(g_value_get_string (&v), "false") == 0)
-        retval = FALSE;
-    g_value_unset (&v);
-    return retval;
+    auto str{qof_instance_get_path_kvp<const char*> (QOF_INSTANCE (cm), {"auto_quote_control"})};
+    return !str || g_strcmp0 (*str, "false");
 }
 
 /********************************************************************
@@ -1083,11 +1076,8 @@ gnc_commodity_get_user_symbol(const gnc_commodity *cm)
 {
     g_return_val_if_fail (GNC_IS_COMMODITY (cm), nullptr);
 
-    GValue v = G_VALUE_INIT;
-    qof_instance_get_kvp (QOF_INSTANCE(cm), &v, 1, "user_symbol");
-    const char *rv = G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : nullptr;
-    g_value_unset (&v);
-    return rv;
+    auto sym{qof_instance_get_path_kvp<const char*> (QOF_INSTANCE(cm), {"user_symbol"})};
+    return sym ? *sym : nullptr;
 }
 
 /********************************************************************
@@ -1245,7 +1235,6 @@ void
 gnc_commodity_set_auto_quote_control_flag(gnc_commodity *cm,
         const gboolean flag)
 {
-    GValue v = G_VALUE_INIT;
     ENTER ("(cm=%p, flag=%d)", cm, flag);
 
     if (!cm)
@@ -1254,15 +1243,8 @@ gnc_commodity_set_auto_quote_control_flag(gnc_commodity *cm,
         return;
     }
     gnc_commodity_begin_edit(cm);
-    if (flag)
-        qof_instance_set_kvp (QOF_INSTANCE (cm), nullptr, 1, "auto_quote_control");
-    else
-    {
-        g_value_init (&v, G_TYPE_STRING);
-        g_value_set_string (&v, "false");
-        qof_instance_set_kvp (QOF_INSTANCE (cm), &v, 1, "auto_quote_control");
-    }
-    g_value_unset (&v);
+    auto val = flag ? std::nullopt : std::make_optional<const char*>(g_strdup("false"));
+    qof_instance_set_path_kvp<const char*> (QOF_INSTANCE (cm), val, {"auto_quote_control"});
     mark_commodity_dirty(cm);
     gnc_commodity_commit_edit(cm);
     LEAVE("");
@@ -1393,18 +1375,8 @@ gnc_commodity_set_user_symbol(gnc_commodity * cm, const char * user_symbol)
 
     gnc_commodity_begin_edit (cm);
 
-    if (user_symbol)
-    {
-        GValue v = G_VALUE_INIT;
-        g_value_init (&v, G_TYPE_STRING);
-        g_value_set_static_string (&v, user_symbol);
-        qof_instance_set_kvp (QOF_INSTANCE(cm), &v, 1, "user_symbol");
-        g_value_unset (&v);
-    }
-    else
-    {
-        qof_instance_set_kvp (QOF_INSTANCE(cm), nullptr, 1, "user_symbol");
-    }
+    auto val = user_symbol ? std::make_optional<const char*>(g_strdup(user_symbol)) : std::nullopt;
+    qof_instance_set_path_kvp<const char*> (QOF_INSTANCE(cm), val, {"user_symbol"});
 
     mark_commodity_dirty(cm);
     gnc_commodity_commit_edit(cm);



Summary of changes:
 libgnucash/engine/Split.cpp         | 80 ++++++++++++-------------------------
 libgnucash/engine/gnc-commodity.cpp | 44 ++++----------------
 libgnucash/engine/gnc-lot.cpp       | 27 +++----------
 3 files changed, 39 insertions(+), 112 deletions(-)



More information about the gnucash-changes mailing list