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