gnucash master: Multiple changes pushed

John Ralls jralls at code.gnucash.org
Mon Feb 27 19:31:07 EST 2023


Updated	 via  https://github.com/Gnucash/gnucash/commit/3d5e2798 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/7f0353ad (commit)
	 via  https://github.com/Gnucash/gnucash/commit/8a7c5392 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/ddc3f288 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/de9c0eb5 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/f483d758 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/6616ce10 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/47b85d3b (commit)
	from  https://github.com/Gnucash/gnucash/commit/ba12e312 (commit)



commit 3d5e27982f4d087936c7232e10fa59720ad20504
Merge: ba12e3125 7f0353adc
Author: John Ralls <jralls at ceridwen.us>
Date:   Mon Feb 27 16:24:44 2023 -0800

    Merge branch 'maint'

diff --cc po/hu.po
index 2ec7d2374,450af2c7f..09fbf9e51
--- a/po/hu.po
+++ b/po/hu.po
@@@ -14,10 -14,10 +14,10 @@@ msgstr "
  "Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug."
  "cgi?product=GnuCash&component=Translations\n"
  "POT-Creation-Date: 2022-12-04 19:47-0800\n"
- "PO-Revision-Date: 2023-02-23 16:38+0000\n"
- "Last-Translator: Szia Tomi <sziatomi01 at gmail.com>\n"
+ "PO-Revision-Date: 2023-02-26 20:44+0000\n"
+ "Last-Translator: mocsa <csaba at feltoltve.hu>\n"
  "Language-Team: Hungarian <https://hosted.weblate.org/projects/gnucash/"
 -"gnucash/hu/>\n"
 +"program-beta/hu/>\n"
  "Language: hu\n"
  "MIME-Version: 1.0\n"
  "Content-Type: text/plain; charset=UTF-8\n"

commit 7f0353adc4b0dc73586bdf056dc5a97eda2599f9
Author: John Ralls <jralls at ceridwen.us>
Date:   Mon Feb 27 16:09:27 2023 -0800

    Fix a missed g_value_dup_string and some no longer used variables.

diff --git a/libgnucash/engine/Transaction.c b/libgnucash/engine/Transaction.c
index 987706f74..1a77c4146 100644
--- a/libgnucash/engine/Transaction.c
+++ b/libgnucash/engine/Transaction.c
@@ -2385,7 +2385,6 @@ xaccTransGetDocLink (const Transaction *trans)
     g_return_val_if_fail (trans, NULL);
 
     GValue v = G_VALUE_INIT;
-    Transaction *t = (Transaction*) trans;
     qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, doclink_uri_str);
     const char* doclink = G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL;
     g_value_unset (&v);
@@ -2399,9 +2398,8 @@ xaccTransGetNotes (const Transaction *trans)
     g_return_val_if_fail (trans, NULL);
 
     GValue v = G_VALUE_INIT;
-    Transaction *t = (Transaction*) trans;
     qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, trans_notes_str);
-    const char *notes = G_VALUE_HOLDS_STRING (&v) ? g_value_dup_string (&v) : NULL;
+    const char *notes = G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL;
     g_value_unset (&v);
 
     return notes;
@@ -2412,7 +2410,6 @@ xaccTransGetIsClosingTxn (const Transaction *trans)
 {
     if (!trans) return FALSE;
 
-    Transaction* trans_nonconst = (Transaction*) trans;
     GValue v = G_VALUE_INIT;
     gboolean rv;
     qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, trans_is_closing_str);
diff --git a/libgnucash/engine/kvp-frame.cpp b/libgnucash/engine/kvp-frame.cpp
index c21370d05..48d300b4e 100644
--- a/libgnucash/engine/kvp-frame.cpp
+++ b/libgnucash/engine/kvp-frame.cpp
@@ -238,17 +238,6 @@ int compare(const KvpFrameImpl & one, const KvpFrameImpl & two) noexcept
     return 0;
 }
 
-
-static void
-gvalue_list_from_kvp_value (KvpValue *kval, gpointer pList)
-{
-    GList **gvlist = NULL;
-    GValue *gval = gvalue_from_kvp_value (kval);
-    gvlist =  (GList**)pList;
-    if (G_VALUE_TYPE (gval))
-        *gvlist = g_list_prepend (*gvlist, gval);
-}
-
 static void
 kvp_value_list_from_gvalue (GValue *gval, gpointer pList)
 {
@@ -263,10 +252,6 @@ kvp_value_list_from_gvalue (GValue *gval, gpointer pList)
 GValue*
 gvalue_from_kvp_value (const KvpValue *kval, GValue* val)
 {
-    gnc_numeric num;
-    Time64 tm;
-    GDate gdate;
-
     if (kval == NULL) return NULL;
     if (!val)
         val = g_slice_new0 (GValue);

commit 8a7c53925870501c8f103c8f09961ecba3341c84
Author: John Ralls <jralls at ceridwen.us>
Date:   Mon Feb 27 14:54:46 2023 -0800

    Bug 798748 - Transaction Notes field's value does not appear in...
    
    reverse transaction.
    
    The proximate cause was that xaccTransBeginEdit put the KVP cache
    variable of the new transaction in a state that prevented the value
    from being copied. More generally the KVP cache variables didn't
    handle any invalidating events.
    
    With the change to GValue usage in qof_instance_get_kvp it's now
    a simple memory dereference with no copying except for POD types
    so caching is no longer useful. This commit removes caching from
    Transaction, eliminating the notes problem.

diff --git a/libgnucash/engine/Transaction.c b/libgnucash/engine/Transaction.c
index 4b1888cc3..987706f74 100644
--- a/libgnucash/engine/Transaction.c
+++ b/libgnucash/engine/Transaction.c
@@ -255,9 +255,6 @@ void gen_event_trans (Transaction *trans)
     }
 }
 
-static const char*
-is_unset = "unset";
-
 /* GObject Initialization */
 G_DEFINE_TYPE(Transaction, gnc_transaction, QOF_TYPE_INSTANCE)
 
@@ -274,11 +271,6 @@ gnc_transaction_init(Transaction* trans)
     trans->date_posted  = 0;
     trans->marker = 0;
     trans->orig = NULL;
-    trans->readonly_reason = (char*) is_unset;
-    trans->isClosingTxn_cached = -1;
-    trans->notes = (char*) is_unset;
-    trans->doclink = (char*) is_unset;
-    trans->void_reason = (char*) is_unset;
     trans->txn_type = TXN_TYPE_UNCACHED;
     LEAVE (" ");
 }
@@ -821,24 +813,12 @@ xaccFreeTransaction (Transaction *trans)
     /* free up transaction strings */
     CACHE_REMOVE(trans->num);
     CACHE_REMOVE(trans->description);
-    if (trans->readonly_reason != is_unset)
-        g_free (trans->readonly_reason);
-    if (trans->doclink != is_unset)
-        g_free (trans->doclink);
-    if (trans->void_reason != is_unset)
-        g_free (trans->void_reason);
-    if (trans->notes != is_unset)
-        g_free (trans->notes);
 
     /* Just in case someone looks up freed memory ... */
     trans->num         = (char *) 1;
     trans->description = NULL;
     trans->date_entered = 0;
     trans->date_posted = 0;
-    trans->readonly_reason = NULL;
-    trans->doclink = NULL;
-    trans->notes = NULL;
-    trans->void_reason = NULL;
     if (trans->orig)
     {
         xaccFreeTransaction (trans->orig);
@@ -2047,7 +2027,7 @@ xaccTransSetDatePostedGDate (Transaction *trans, GDate date)
      * the future a date which was set as *date* (without time) can
      * clearly be distinguished from the time64. */
     g_value_init (&v, G_TYPE_DATE);
-    g_value_set_boxed (&v, &date);
+    g_value_set_static_boxed (&v, &date);
     qof_instance_set_kvp (QOF_INSTANCE(trans), &v, 1, TRANS_DATE_POSTED);
     g_value_unset (&v);
     /* mark dirty and commit handled by SetDateInternal */
@@ -2105,7 +2085,7 @@ xaccTransSetDateDue (Transaction * trans, time64 time)
     GValue v = G_VALUE_INIT;
     if (!trans) return;
     g_value_init (&v, GNC_TYPE_TIME64);
-    g_value_set_boxed (&v, &time);
+    g_value_set_static_boxed (&v, &time);
     xaccTransBeginEdit(trans);
     qof_instance_set_kvp (QOF_INSTANCE (trans), &v, 1, TRANS_DATE_DUE_KVP);
     qof_instance_set_dirty(QOF_INSTANCE(trans));
@@ -2126,7 +2106,7 @@ xaccTransSetTxnType (Transaction *trans, char type)
         g_value_unset (&v);
         return;
     }
-    g_value_set_string (&v, s);
+    g_value_set_static_string (&v, s);
     xaccTransBeginEdit(trans);
     qof_instance_set_kvp (QOF_INSTANCE (trans), &v, 1, TRANS_TXN_TYPE_KVP);
     qof_instance_set_dirty(QOF_INSTANCE(trans));
@@ -2142,10 +2122,6 @@ void xaccTransClearReadOnly (Transaction *trans)
         qof_instance_set_kvp (QOF_INSTANCE (trans), NULL, 1, TRANS_READ_ONLY_REASON);
         qof_instance_set_dirty(QOF_INSTANCE(trans));
         xaccTransCommitEdit(trans);
-
-        if (trans->readonly_reason != is_unset)
-            g_free (trans->readonly_reason);
-        trans->readonly_reason = NULL;
     }
 }
 
@@ -2156,16 +2132,12 @@ xaccTransSetReadOnly (Transaction *trans, const char *reason)
     {
         GValue v = G_VALUE_INIT;
         g_value_init (&v, G_TYPE_STRING);
-        g_value_set_string (&v, reason);
+        g_value_set_static_string (&v, reason);
         xaccTransBeginEdit(trans);
         qof_instance_set_kvp (QOF_INSTANCE (trans), &v, 1, TRANS_READ_ONLY_REASON);
         qof_instance_set_dirty(QOF_INSTANCE(trans));
         g_value_unset (&v);
         xaccTransCommitEdit(trans);
-
-        if (trans->readonly_reason != is_unset)
-            g_free (trans->readonly_reason);
-        trans->readonly_reason = g_strdup (reason);
     }
 }
 
@@ -2218,25 +2190,16 @@ xaccTransSetDocLink (Transaction *trans, const char *doclink)
 {
     if (!trans || !doclink) return;
 
-    if (trans->doclink != is_unset)
-    {
-        if (!g_strcmp0 (doclink, trans->doclink))
-            return;
-
-        g_free (trans->doclink);
-    }
     xaccTransBeginEdit(trans);
     if (doclink[0] == '\0')
     {
-        trans->doclink = NULL;
         qof_instance_set_kvp (QOF_INSTANCE (trans), NULL, 1, doclink_uri_str);
     }
     else
     {
         GValue v = G_VALUE_INIT;
-        trans->doclink = g_strdup (doclink);
         g_value_init (&v, G_TYPE_STRING);
-        g_value_set_string (&v, doclink);
+        g_value_set_static_string (&v, doclink); //Gets copied at the other end
         qof_instance_set_kvp (QOF_INSTANCE (trans), &v, 1, doclink_uri_str);
         g_value_unset (&v);
     }
@@ -2257,18 +2220,9 @@ xaccTransSetNotes (Transaction *trans, const char *notes)
 {
     GValue v = G_VALUE_INIT;
     if (!trans || !notes) return;
-    if (trans->notes != is_unset)
-    {
-        if (!g_strcmp0 (notes, trans->notes))
-            return;
-
-        g_free (trans->notes);
-    }
     g_value_init (&v, G_TYPE_STRING);
-    g_value_set_string (&v, notes);
+    g_value_set_static_string (&v, notes);
     xaccTransBeginEdit(trans);
-
-    trans->notes = g_strdup (notes);
     qof_instance_set_kvp (QOF_INSTANCE (trans), &v, 1, trans_notes_str);
     qof_instance_set_dirty(QOF_INSTANCE(trans));
     g_value_unset (&v);
@@ -2288,12 +2242,10 @@ xaccTransSetIsClosingTxn (Transaction *trans, gboolean is_closing)
         g_value_set_int64 (&v, 1);
         qof_instance_set_kvp (QOF_INSTANCE (trans), &v, 1, trans_is_closing_str);
         g_value_unset (&v);
-        trans->isClosingTxn_cached = 1;
     }
     else
     {
         qof_instance_set_kvp (QOF_INSTANCE (trans), NULL, 1, trans_is_closing_str);
-        trans->isClosingTxn_cached = 0;
     }
     qof_instance_set_dirty(QOF_INSTANCE(trans));
     xaccTransCommitEdit(trans);
@@ -2431,50 +2383,46 @@ const char *
 xaccTransGetDocLink (const Transaction *trans)
 {
     g_return_val_if_fail (trans, NULL);
-    if (trans->doclink == is_unset)
-    {
-        GValue v = G_VALUE_INIT;
-        Transaction *t = (Transaction*) trans;
-        qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, doclink_uri_str);
-        t->doclink = G_VALUE_HOLDS_STRING (&v) ? g_value_dup_string (&v) : NULL;
-        g_value_unset (&v);
-    }
-    return trans->doclink;
+
+    GValue v = G_VALUE_INIT;
+    Transaction *t = (Transaction*) trans;
+    qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, doclink_uri_str);
+    const char* doclink = G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL;
+    g_value_unset (&v);
+
+    return doclink;
 }
 
 const char *
 xaccTransGetNotes (const Transaction *trans)
 {
     g_return_val_if_fail (trans, NULL);
-    if (trans->notes == is_unset)
-    {
-        GValue v = G_VALUE_INIT;
-        Transaction *t = (Transaction*) trans;
-        qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, trans_notes_str);
-        t->notes = G_VALUE_HOLDS_STRING (&v) ? g_value_dup_string (&v) : NULL;
-        g_value_unset (&v);
-    }
-    return trans->notes;
+
+    GValue v = G_VALUE_INIT;
+    Transaction *t = (Transaction*) trans;
+    qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, trans_notes_str);
+    const char *notes = G_VALUE_HOLDS_STRING (&v) ? g_value_dup_string (&v) : NULL;
+    g_value_unset (&v);
+
+    return notes;
 }
 
 gboolean
 xaccTransGetIsClosingTxn (const Transaction *trans)
 {
     if (!trans) return FALSE;
-    if (trans->isClosingTxn_cached == -1)
-    {
-        Transaction* trans_nonconst = (Transaction*) trans;
-        GValue v = G_VALUE_INIT;
-        qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, trans_is_closing_str);
-        if (G_VALUE_HOLDS_INT64 (&v))
-            trans_nonconst->isClosingTxn_cached = (g_value_get_int64 (&v) ? 1 : 0);
-        else
-            trans_nonconst->isClosingTxn_cached = 0;
-        g_value_unset (&v);
-    }
-    return (trans->isClosingTxn_cached == 1)
-            ? TRUE
-            : FALSE;
+
+    Transaction* trans_nonconst = (Transaction*) trans;
+    GValue v = G_VALUE_INIT;
+    gboolean rv;
+    qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, trans_is_closing_str);
+    if (G_VALUE_HOLDS_INT64 (&v))
+        rv = (g_value_get_int64 (&v) ? 1 : 0);
+    else
+        rv = 0;
+    g_value_unset (&v);
+
+    return rv;
 }
 
 /********************************************************************\
@@ -2604,15 +2552,12 @@ xaccTransGetReadOnly (Transaction *trans)
     if (!trans)
         return NULL;
 
-    if (trans->readonly_reason == is_unset)
-    {
-        GValue v = G_VALUE_INIT;
-        qof_instance_get_kvp (QOF_INSTANCE(trans), &v, 1, TRANS_READ_ONLY_REASON);
-        trans->readonly_reason = G_VALUE_HOLDS_STRING (&v) ?
-            g_value_dup_string (&v) : NULL;
-        g_value_unset (&v);
-    }
-    return trans->readonly_reason;
+    GValue v = G_VALUE_INIT;
+    qof_instance_get_kvp (QOF_INSTANCE(trans), &v, 1, TRANS_READ_ONLY_REASON);
+    const char *readonly_reason = G_VALUE_HOLDS_STRING (&v) ?
+        g_value_get_string (&v) : NULL;
+    g_value_unset (&v);
+    return readonly_reason;
 }
 
 static gboolean
@@ -2810,16 +2755,13 @@ xaccTransVoid(Transaction *trans, const char *reason)
     else
         g_value_init (&v, G_TYPE_STRING);
 
-    g_value_set_string (&v, _("Voided transaction"));
+    g_value_set_static_string (&v, _("Voided transaction"));
     qof_instance_set_kvp (QOF_INSTANCE (trans), &v, 1, trans_notes_str);
-    g_value_set_string (&v, reason);
+    g_value_set_static_string (&v, reason);
     qof_instance_set_kvp (QOF_INSTANCE (trans), &v, 1, void_reason_str);
-    if (trans->void_reason != is_unset)
-        g_free (trans->void_reason);
-    trans->void_reason = g_strdup (reason);
 
     gnc_time64_to_iso8601_buff (gnc_time(NULL), iso8601_str);
-    g_value_set_string (&v, iso8601_str);
+    g_value_set_static_string (&v, iso8601_str);
     qof_instance_set_kvp (QOF_INSTANCE (trans), &v, 1, void_time_str);
     g_value_unset (&v);
 
@@ -2841,15 +2783,13 @@ const char *
 xaccTransGetVoidReason(const Transaction *trans)
 {
     g_return_val_if_fail (trans, NULL);
-    if (trans->void_reason == is_unset)
-    {
-        GValue v = G_VALUE_INIT;
-        Transaction *t = (Transaction*) trans;
-        qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, void_reason_str);
-        t->void_reason = G_VALUE_HOLDS_STRING (&v) ? g_value_dup_string (&v) : NULL;
-        g_value_unset (&v);
-    }
-    return trans->void_reason;
+
+    GValue v = G_VALUE_INIT;
+    qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, void_reason_str);
+    const char *void_reason = G_VALUE_HOLDS_STRING (&v) ? g_value_get_string (&v) : NULL;
+    g_value_unset (&v);
+
+    return void_reason;
 }
 
 time64
@@ -2889,8 +2829,6 @@ xaccTransUnvoid (Transaction *trans)
     qof_instance_set_kvp (QOF_INSTANCE (trans), NULL, 1, void_reason_str);
     qof_instance_set_kvp (QOF_INSTANCE (trans), NULL, 1, void_time_str);
     g_value_unset (&v);
-    g_free (trans->void_reason);
-    trans->void_reason = NULL;
 
     FOR_EACH_SPLIT(trans, xaccSplitUnvoid(s));
 
@@ -2927,7 +2865,7 @@ xaccTransReverse (Transaction *orig)
 
     /* Now update the original with a pointer to the new one */
     g_value_init (&v, GNC_TYPE_GUID);
-    g_value_set_boxed (&v, xaccTransGetGUID(trans));
+    g_value_set_static_boxed (&v, xaccTransGetGUID(trans));
     qof_instance_set_kvp (QOF_INSTANCE (orig), &v, 1, TRANS_REVERSED_BY);
     g_value_unset (&v);
 
diff --git a/libgnucash/engine/TransactionP.h b/libgnucash/engine/TransactionP.h
index 3e107ff39..0a22be0cc 100644
--- a/libgnucash/engine/TransactionP.h
+++ b/libgnucash/engine/TransactionP.h
@@ -111,23 +111,11 @@ struct transaction_s
      */
     Transaction *orig;
 
-    /* The readonly_reason is a string that indicates why a transaction
-     * is marked as read-only. If NULL, the transaction is read-write.
-     * This value is stored in kvp, but we cache a copy here for
-     * performance reasons.
+    /* A flag to indicate when a transaction represents an invoice, a payment,
+     * or a link between the two.
      */
-    char * readonly_reason;
-
-    char * doclink;
-    char * void_reason;
-    char * notes;
-
     char txn_type;
 
-    /* Cached bool value to indicate whether this is a closing txn. This is
-     * cached from the KVP value because it is queried a lot. Tri-state value: -1
-     * = uninitialized; 0 = FALSE, 1 = TRUE. */
-    gint isClosingTxn_cached;
 };
 
 struct _TransactionClass
diff --git a/libgnucash/engine/mocks/gmock-Transaction.h b/libgnucash/engine/mocks/gmock-Transaction.h
index ce82437fa..e9dcd53fc 100644
--- a/libgnucash/engine/mocks/gmock-Transaction.h
+++ b/libgnucash/engine/mocks/gmock-Transaction.h
@@ -32,8 +32,6 @@ public:
         date_posted         = 0;
         marker              = 0;
         orig                = nullptr;
-        readonly_reason     = nullptr;
-        isClosingTxn_cached = -1;
     }
     void* operator new(size_t size)
     {

commit ddc3f28899c71579abd9b2bd822baa6b95fc41d6
Author: John Ralls <jralls at ceridwen.us>
Date:   Mon Feb 27 13:02:27 2023 -0800

    [kvp] Use static strings and boxed in gvalue_from_kvp_value.
    
    Saves allocating and copying complex values, avoiding potential
    memory leaks.

diff --git a/libgnucash/engine/kvp-frame.cpp b/libgnucash/engine/kvp-frame.cpp
index 56be042d4..c21370d05 100644
--- a/libgnucash/engine/kvp-frame.cpp
+++ b/libgnucash/engine/kvp-frame.cpp
@@ -261,15 +261,17 @@ kvp_value_list_from_gvalue (GValue *gval, gpointer pList)
 }
 
 GValue*
-gvalue_from_kvp_value (const KvpValue *kval)
+gvalue_from_kvp_value (const KvpValue *kval, GValue* val)
 {
-    GValue *val;
     gnc_numeric num;
     Time64 tm;
     GDate gdate;
 
     if (kval == NULL) return NULL;
-    val = g_slice_new0 (GValue);
+    if (!val)
+        val = g_slice_new0 (GValue);
+    else
+        g_value_unset(val);
 
     switch (kval->get_type())
     {
@@ -283,36 +285,28 @@ gvalue_from_kvp_value (const KvpValue *kval)
             break;
         case KvpValue::Type::NUMERIC:
             g_value_init (val, GNC_TYPE_NUMERIC);
-            num = kval->get<gnc_numeric>();
-            g_value_set_boxed (val, &num);
+            g_value_set_static_boxed (val, kval->get_ptr<gnc_numeric>());
             break;
         case KvpValue::Type::STRING:
             g_value_init (val, G_TYPE_STRING);
-            g_value_set_string (val, kval->get<const char*>());
+            g_value_set_static_string (val, kval->get<const char*>());
             break;
         case KvpValue::Type::GUID:
             g_value_init (val, GNC_TYPE_GUID);
-            g_value_set_boxed (val, kval->get<GncGUID*>());
+            g_value_set_static_boxed (val, kval->get<GncGUID*>());
             break;
         case KvpValue::Type::TIME64:
             g_value_init (val, GNC_TYPE_TIME64);
-            tm = kval->get<Time64>();
-            g_value_set_boxed (val, &tm);
+            g_value_set_boxed (val, kval->get_ptr<Time64>());
             break;
         case KvpValue::Type::GDATE:
             g_value_init (val, G_TYPE_DATE);
-            gdate = kval->get<GDate>();
-            g_value_set_boxed (val, &gdate);
+            g_value_set_static_boxed (val, kval->get_ptr<GDate>());
             break;
         case KvpValue::Type::GLIST:
         {
-            GList *gvalue_list = NULL;
-            GList *kvp_list = kval->get<GList*>();
-            g_list_foreach (kvp_list, (GFunc)gvalue_list_from_kvp_value,
-                            &gvalue_list);
             g_value_init (val, GNC_TYPE_VALUE_LIST);
-            gvalue_list = g_list_reverse (gvalue_list);
-            g_value_set_boxed (val, gvalue_list);
+            g_value_set_static_boxed (val, kval->get<GList*>());
             break;
         }
 /* No transfer of KVP frames outside of QofInstance-derived classes! */
diff --git a/libgnucash/engine/kvp-value.hpp b/libgnucash/engine/kvp-value.hpp
index 61b7dfd99..e7083b2f2 100644
--- a/libgnucash/engine/kvp-value.hpp
+++ b/libgnucash/engine/kvp-value.hpp
@@ -142,6 +142,8 @@ struct KvpValueImpl
 
     template <typename T>
     T get() const noexcept;
+    template <typename T>
+    const T* get_ptr() const noexcept;
 
     template <typename T>
     void set(T) noexcept;
@@ -178,6 +180,13 @@ KvpValueImpl::get() const noexcept
     return boost::get<T>(datastore);
 }
 
+template <typename T> const T*
+KvpValueImpl::get_ptr() const noexcept
+{
+    if (this->datastore.type() != typeid(T)) return nullptr;
+    return boost::get<T>(&datastore);
+}
+
 template <typename T> void
 KvpValueImpl::set(T val) noexcept
 {
@@ -190,7 +199,7 @@ KvpValueImpl::set(T val) noexcept
  * @param kval: A KvpValue.
  * @return GValue*. Must be freed with g_free().
  */
-GValue* gvalue_from_kvp_value (const KvpValue *kval);
+GValue* gvalue_from_kvp_value (const KvpValue *kval, GValue* val = nullptr);
 
 /** Convert a gvalue into a kvpvalue.
  * @param gval: A GValue of a type KvpValue can digest.
diff --git a/libgnucash/engine/qofinstance.cpp b/libgnucash/engine/qofinstance.cpp
index 16b964b7e..97c3063e4 100644
--- a/libgnucash/engine/qofinstance.cpp
+++ b/libgnucash/engine/qofinstance.cpp
@@ -1090,15 +1090,7 @@ qof_instance_get_kvp (QofInstance * inst, GValue * value, unsigned count, ...)
     for (unsigned i{0}; i < count; ++i)
         path.push_back (va_arg (args, char const *));
     va_end (args);
-    auto temp = gvalue_from_kvp_value (inst->kvp_data->get_slot (path));
-    if (G_IS_VALUE (temp))
-    {
-        if (G_IS_VALUE (value))
-            g_value_unset (value);
-        g_value_init (value, G_VALUE_TYPE (temp));
-        g_value_copy (temp, value);
-        gnc_gvalue_free (temp);
-    }
+    gvalue_from_kvp_value (inst->kvp_data->get_slot (path), value);
 }
 
 void

commit de9c0eb5408ed1f90fd36abc4f1d2d4a7bc4af0a
Author: John Ralls <jralls at ceridwen.us>
Date:   Mon Feb 27 10:11:06 2023 -0800

    Bug 797903 - Transaction window: The 'blue line' is always...
    
    (erroneously) topmost when t. sorting order is inverted.
    
    Same problem for the 'red line'. Make register code aware of sort
    order and flip the logic when reverse sorting.

diff --git a/gnucash/gnome/gnc-split-reg.c b/gnucash/gnome/gnc-split-reg.c
index d6c37ce17..38cf709a7 100644
--- a/gnucash/gnome/gnc-split-reg.c
+++ b/gnucash/gnome/gnc-split-reg.c
@@ -2148,6 +2148,8 @@ gnc_split_reg_set_sort_reversed(GNCSplitReg *gsr, gboolean rev, gboolean refresh
     Query *query = gnc_ledger_display_get_query( gsr->ledger );
     qof_query_set_sort_increasing (query, !rev, !rev, !rev);
     gsr->sort_rev = rev;
+    Account *acct = gnc_ledger_display_leader (gsr->ledger);
+    xaccAccountSetSortReversed(acct, rev);
     if (refresh)
         gnc_ledger_display_refresh( gsr->ledger );
 }
diff --git a/gnucash/register/ledger-core/split-register-load.c b/gnucash/register/ledger-core/split-register-load.c
index a86250be0..99d8df6bd 100644
--- a/gnucash/register/ledger-core/split-register-load.c
+++ b/gnucash/register/ledger-core/split-register-load.c
@@ -25,7 +25,11 @@
 #include <config.h>
 
 #include <glib/gi18n.h>
+#include <stdbool.h>
+#include <stdio.h>
 
+#include "Account.h"
+#include "Transaction.h"
 #include "account-quickfill.h"
 #include "combocell.h"
 #include "gnc-component-manager.h"
@@ -373,6 +377,7 @@ gnc_split_register_load (SplitRegister* reg, GList* slist,
     gboolean need_divider_upper = FALSE;
     gboolean found_divider_upper = FALSE;
     gboolean found_divider = FALSE;
+    bool reverse_sort = xaccAccountGetSortReversed(default_account);
     gboolean has_last_num = FALSE;
     gboolean multi_line;
     gboolean dynamic;
@@ -605,7 +610,8 @@ gnc_split_register_load (SplitRegister* reg, GList* slist,
             use_autoreadonly &&
             !found_divider_upper)
         {
-            if (xaccTransGetDate (trans) >= autoreadonly_time)
+            if (((reverse_sort && xaccTransGetDate(trans) < autoreadonly_time) ||
+                 (!reverse_sort && xaccTransGetDate (trans) >= autoreadonly_time)))
             {
                 table->model->dividing_row_upper = vcell_loc.virt_row;
                 found_divider_upper = TRUE;
@@ -616,9 +622,9 @@ gnc_split_register_load (SplitRegister* reg, GList* slist,
             }
         }
 
-        if (info->show_present_divider &&
-            !found_divider &&
-            (xaccTransGetDate (trans) > present))
+        if (info->show_present_divider && !found_divider &&
+            ((reverse_sort && xaccTransGetDate(trans) < present) ||
+             (!reverse_sort && xaccTransGetDate (trans) > present)))
         {
             table->model->dividing_row = vcell_loc.virt_row;
             found_divider = TRUE;
@@ -649,7 +655,6 @@ gnc_split_register_load (SplitRegister* reg, GList* slist,
                                                     &vcell_loc);
 
                 table->model->dividing_row_lower = vcell_loc.virt_row;
-
                 if (!multi_line)
                     start_primary_color = !start_primary_color;
 
@@ -731,7 +736,9 @@ gnc_split_register_load (SplitRegister* reg, GList* slist,
                                             &vcell_loc);
 
         if (future_after_blank)
+        {
             table->model->dividing_row_lower = vcell_loc.virt_row;
+        }
     }
 
     /* go to blank on first pass */

commit f483d7588e1ac7a5de5021ddea725145f5cd43c1
Author: Szia Tomi <sziatomi01 at gmail.com>
Date:   Sun Feb 26 21:44:27 2023 +0100

    Translation update  by Szia Tomi <sziatomi01 at gmail.com> using Weblate
    
    po/glossary/hu.po: 100.0% (216 of 216 strings; 0 fuzzy)
    0 failing checks (0.0%)
    Translation: GnuCash/Glossary (Hungarian)
    Translate-URL: https://hosted.weblate.org/projects/gnucash/glossary/hu/
    
    Co-authored-by: Szia Tomi <sziatomi01 at gmail.com>

diff --git a/po/glossary/hu.po b/po/glossary/hu.po
index 2bb28f5ea..29971e7d5 100644
--- a/po/glossary/hu.po
+++ b/po/glossary/hu.po
@@ -12,8 +12,8 @@ msgstr ""
 "Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug."
 "cgi?product=GnuCash&component=Translations\n"
 "POT-Creation-Date: 2021-12-05 20:11+0100\n"
-"PO-Revision-Date: 2023-02-23 12:38+0000\n"
-"Last-Translator: mocsa <csaba at feltoltve.hu>\n"
+"PO-Revision-Date: 2023-02-26 17:38+0000\n"
+"Last-Translator: Szia Tomi <sziatomi01 at gmail.com>\n"
 "Language-Team: Hungarian <https://hosted.weblate.org/projects/gnucash/"
 "glossary/hu/>\n"
 "Language: hu\n"
@@ -110,7 +110,7 @@ msgstr "számlatípus: Részvény"
 
 #. "This account type (new in gnucash-2.4.0) is used when exchanging or trading amounts from one currency into another"
 msgid "account type: trading"
-msgstr "számlatípus: devizakonverziós"
+msgstr "számlatípus: kereskedés(devizakonverziós)"
 
 #. "-"
 msgid "account: parent account"

commit 6616ce10772bd91045343cc58ddc1d186dd4e9f6
Author: mocsa <csaba at feltoltve.hu>
Date:   Sun Feb 26 21:44:27 2023 +0100

    Translation update  by mocsa <csaba at feltoltve.hu> using Weblate
    
    po/hu.po: 64.1% (3464 of 5401 strings; 960 fuzzy)
    199 failing checks (3.6%)
    Translation: GnuCash/Program (Hungarian)
    Translate-URL: https://hosted.weblate.org/projects/gnucash/gnucash/hu/
    
    Translation update  by mocsa <csaba at feltoltve.hu> using Weblate
    
    po/hu.po: 64.0% (3461 of 5401 strings; 963 fuzzy)
    199 failing checks (3.6%)
    Translation: GnuCash/Program (Hungarian)
    Translate-URL: https://hosted.weblate.org/projects/gnucash/gnucash/hu/
    
    Co-authored-by: mocsa <csaba at feltoltve.hu>

diff --git a/po/hu.po b/po/hu.po
index 640b4c77c..450af2c7f 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -14,8 +14,8 @@ msgstr ""
 "Report-Msgid-Bugs-To: https://bugs.gnucash.org/enter_bug."
 "cgi?product=GnuCash&component=Translations\n"
 "POT-Creation-Date: 2022-12-04 19:47-0800\n"
-"PO-Revision-Date: 2023-02-23 16:38+0000\n"
-"Last-Translator: Szia Tomi <sziatomi01 at gmail.com>\n"
+"PO-Revision-Date: 2023-02-26 20:44+0000\n"
+"Last-Translator: mocsa <csaba at feltoltve.hu>\n"
 "Language-Team: Hungarian <https://hosted.weblate.org/projects/gnucash/"
 "gnucash/hu/>\n"
 "Language: hu\n"
@@ -903,7 +903,7 @@ msgstr "A könyv lezárása sikeres volt."
 #. that will be created. This is a ngettext(3) message (but
 #. only for the %d part).
 #: gnucash/gnome/assistant-acct-period.c:315
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "The earliest transaction date found in this book is %s. Based on the "
 "selection made above, this book will be split into %d book."
@@ -911,9 +911,8 @@ msgid_plural ""
 "The earliest transaction date found in this book is %s. Based on the "
 "selection made above, this book will be split into %d books."
 msgstr[0] ""
-"A legkorábbi könyvelés dátuma a könyvben %s. A fenti kiválasztás alapján a "
-"könyvelés-megosztás a %d könyvekben megy végbe. Kattintson a \"Következő\"-"
-"re, hogy elkezdje bezárni az első könyvet."
+"Ebben a főkönyvben a legkorábbi tranzakció dátuma %s. A fenti választás "
+"alapján a könyv %d felé lesz szétosztva."
 
 #. Translators: Run the assistant in your language to see GTK's translation of the button labels.
 #: gnucash/gnome/assistant-acct-period.c:371
@@ -945,13 +944,13 @@ msgid ""
 msgstr ""
 
 #: gnucash/gnome/assistant-acct-period.c:525
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "%s\n"
 "Congratulations! You are done closing books!\n"
 msgstr ""
 "%s\n"
-"Gratulálunk! Ön végzett a könyvek lezárásával!\n"
+"Gratulálunk! Befejezte a könyvek lezárását!\n"
 
 #: gnucash/gnome/assistant-acct-period.c:594
 #: gnucash/gtkbuilder/dialog-fincalc.glade:650
@@ -1725,10 +1724,8 @@ msgstr "Töltelék számla lett kiválasztva. Próbálja újra."
 
 #: gnucash/gnome/dialog-doclink.c:160
 #: gnucash/gnome/gnc-plugin-page-register.c:4765
-#, fuzzy
-#| msgid "Select Account"
 msgid "Select document"
-msgstr "Folyószámla kiválasztása"
+msgstr "Dokumentum kiválasztása"
 
 #: gnucash/gnome/dialog-doclink.c:163 gnucash/gnome/gnc-plugin-budget.c:323
 #: gnucash/gnome-search/search-account.c:238
@@ -15789,9 +15786,8 @@ msgid "Linked Document"
 msgstr "Megbízás párbeszédablak"
 
 #: gnucash/gtkbuilder/dialog-doclink.glade:697
-#, fuzzy
 msgid "Available"
-msgstr "Számlázható?"
+msgstr ""
 
 #: gnucash/gtkbuilder/dialog-doclink.glade:712
 msgid "Relative"
@@ -16475,8 +16471,8 @@ msgstr "_Igen"
 msgid ""
 "<span weight=\"bold\" size=\"larger\">Display Welcome Dialog Again?</span>"
 msgstr ""
-"<span weight=\"bold\" size=\"larger\">Újból megjeleníti az "
-"üdvözlőablakot?</span>"
+"<span weight=\"bold\" size=\"larger\">Máskor is jelenjen meg az "
+"Üdvözlőablak?</span>"
 
 #: gnucash/gtkbuilder/dialog-new-user.glade:101
 msgid ""
@@ -16484,9 +16480,9 @@ msgid ""
 "will be displayed again next time you start GnuCash. If you press the <i>No</"
 "i> button, it will not be displayed again."
 msgstr ""
-"Ha az <i>Igen</i> gombot nyomja meg, az <i>Üdvözli a GnuCash</i> ablak a "
-"következő alkalommal is megjelenik, amikor elindítja GnuCash-t. Ha a <i>Nem</"
-"i> gombot nyomja meg, akkor nem jelenik meg újra."
+"Ha az <i>Igen</i> gombra kattint, az <i>Üdvözlőablak</i> a GnuCash következő "
+"indításakor is megjelenik. Ha a <i>Nem</i> gombra kattint, akkor nem jelenik "
+"meg újra."
 
 #: gnucash/gtkbuilder/dialog-new-user.glade:210
 msgid "<span size=\"larger\" weight=\"bold\">Welcome to GnuCash!</span>"
@@ -19257,9 +19253,8 @@ msgid "Only show _active owners"
 msgstr ""
 
 #: gnucash/gtkbuilder/gnc-tree-view-owner.glade:79
-#, fuzzy
 msgid "Show _zero balance owners"
-msgstr "Nulla egyenlegű elemek feltüntetése?"
+msgstr ""
 
 #: gnucash/gtkbuilder/window-autoclear.glade:71
 #, fuzzy
@@ -21896,9 +21891,8 @@ msgid "Enter a name for the account"
 msgstr "Adjon meg egy folyószámlanevet"
 
 #: gnucash/import-export/qif-imp/dialog-account-picker.c:443
-#, fuzzy
 msgid "Placeholder?"
-msgstr "Töltelék"
+msgstr "Töltelék?"
 
 #: gnucash/import-export/qif-imp/gnc-plugin-qif-import.c:48
 msgid "Import _QIF..."
@@ -22312,10 +22306,9 @@ msgstr "sample:Költségek:Autó:Üzemanyag"
 
 #. Translators: Abbreviation sample for Taxable?
 #: gnucash/register/ledger-core/gncEntryLedgerLayout.c:132
-#, fuzzy
 msgctxt "sample for 'Taxable'"
 msgid "T?"
-msgstr "A"
+msgstr ""
 
 #. Translators: Abbreviation sample for Tax Included
 #: gnucash/register/ledger-core/gncEntryLedgerLayout.c:137
@@ -23077,9 +23070,8 @@ msgstr "Pénznem kiválasztása, amelyben jelentés értékei megjelennek."
 #: gnucash/report/options-utilities.scm:143
 #: gnucash/report/reports/standard/advanced-portfolio.scm:81
 #: gnucash/report/reports/standard/price-scatter.scm:78
-#, fuzzy
 msgid "The source of price information."
-msgstr "Az árinformáció forrása"
+msgstr "Árfolyamok forrása."
 
 #: gnucash/report/options-utilities.scm:144
 msgid "Average cost of purchases weighted by volume"
@@ -23486,27 +23478,23 @@ msgstr ""
 
 #: gnucash/report/reports/aging.scm:410
 #: gnucash/report/reports/standard/new-aging.scm:52
-#, fuzzy
 msgid "Display Address 1."
-msgstr "Dátum megjelenítése?"
+msgstr ""
 
 #: gnucash/report/reports/aging.scm:418
 #: gnucash/report/reports/standard/new-aging.scm:53
-#, fuzzy
 msgid "Display Address 2."
-msgstr "Dátum megjelenítése?"
+msgstr ""
 
 #: gnucash/report/reports/aging.scm:426
 #: gnucash/report/reports/standard/new-aging.scm:54
-#, fuzzy
 msgid "Display Address 3."
-msgstr "Dátum megjelenítése?"
+msgstr ""
 
 #: gnucash/report/reports/aging.scm:434
 #: gnucash/report/reports/standard/new-aging.scm:55
-#, fuzzy
 msgid "Display Address 4."
-msgstr "Dátum megjelenítése?"
+msgstr ""
 
 #: gnucash/report/reports/aging.scm:442
 #: gnucash/report/reports/standard/new-aging.scm:56
@@ -23528,9 +23516,8 @@ msgstr "Rövid jelölések megjelenítése"
 
 #: gnucash/report/reports/aging.scm:466
 #: gnucash/report/reports/standard/new-aging.scm:59
-#, fuzzy
 msgid "Display Active status."
-msgstr "Dátum megjelenítése?"
+msgstr ""
 
 #: gnucash/report/reports/aging.scm:539
 #: gnucash/report/reports/standard/new-aging.scm:181
@@ -25530,9 +25517,8 @@ msgstr "Nem pénzjavak megjelenítése"
 
 #: gnucash/report/reports/standard/balsheet-pnl.scm:124
 #: gnucash/report/trep-engine.scm:551
-#, fuzzy
 msgid "Also show original currency amounts"
-msgstr "A számla idegen pénznembeli összegeinek megjelenítése?"
+msgstr "Összegek megjelenítése eredeti pénznemben is"
 
 #: gnucash/report/reports/standard/balsheet-pnl.scm:126
 msgid "If more than 1 period column, include overall period?"
@@ -26110,19 +26096,16 @@ msgid "Include transfers to and from Trading Accounts in the report."
 msgstr ""
 
 #: gnucash/report/reports/standard/cashflow-barchart.scm:107
-#, fuzzy
 msgid "Show money in?"
-msgstr "Rajz megjelenítése"
+msgstr ""
 
 #: gnucash/report/reports/standard/cashflow-barchart.scm:113
-#, fuzzy
 msgid "Show money out?"
-msgstr "Rajz megjelenítése"
+msgstr ""
 
 #: gnucash/report/reports/standard/cashflow-barchart.scm:119
-#, fuzzy
 msgid "Show net money flow?"
-msgstr "Rajz megjelenítése"
+msgstr "Nettó pénzáramlás megjelenítése?"
 
 #: gnucash/report/reports/standard/cashflow-barchart.scm:303
 #: gnucash/report/reports/standard/cashflow-barchart.scm:339
@@ -26952,24 +26935,20 @@ msgid "Display the price per item?"
 msgstr "Elemenkénti ár megjelenítése?"
 
 #: gnucash/report/reports/standard/invoice.scm:225
-#, fuzzy
 msgid "Display the entry's discount?"
-msgstr "Tétel-kedvezmény megjelenítése"
+msgstr ""
 
 #: gnucash/report/reports/standard/invoice.scm:230
-#, fuzzy
 msgid "Display the entry's taxable status?"
-msgstr "Adókötelesség megjelenítése"
+msgstr ""
 
 #: gnucash/report/reports/standard/invoice.scm:235
-#, fuzzy
 msgid "Display each entry's total total tax?"
-msgstr "Minden tételösszeg összesített adója"
+msgstr ""
 
 #: gnucash/report/reports/standard/invoice.scm:240
-#, fuzzy
 msgid "Display the entry's value?"
-msgstr "Tétel értéke megjelenítése"
+msgstr ""
 
 #: gnucash/report/reports/standard/invoice.scm:245
 msgid "Display due date?"
@@ -27530,22 +27509,19 @@ msgstr "Számla megjelenítése?"
 
 #: gnucash/report/reports/standard/new-owner-report.scm:918
 #: gnucash/report/reports/standard/owner-report.scm:597
-#, fuzzy
 msgid "Display the period debits column?"
-msgstr "Tétel-kedvezmény megjelenítése"
+msgstr ""
 
 #: gnucash/report/reports/standard/new-owner-report.scm:923
 #: gnucash/report/reports/standard/owner-report.scm:592
-#, fuzzy
 msgid "Display the period credits column?"
-msgstr "Tétel-kedvezmény megjelenítése"
+msgstr ""
 
 #: gnucash/report/reports/standard/new-owner-report.scm:928
 #: gnucash/report/reports/standard/register.scm:413
 #: gnucash/report/trep-engine.scm:962
-#, fuzzy
 msgid "Display a running balance?"
-msgstr "Futó egyenleg megjelenítése"
+msgstr "Folyó egyenleg megjelenítése?"
 
 #: gnucash/report/reports/standard/new-owner-report.scm:936
 #, fuzzy
@@ -27575,9 +27551,8 @@ msgid "Detailed"
 msgstr "Sikertelen"
 
 #: gnucash/report/reports/standard/new-owner-report.scm:949
-#, fuzzy
 msgid "Display document link?"
-msgstr "Számlanév megjelenítése hiperhivatkozásként"
+msgstr "Dokumentum hivatkozás megjelenítése?"
 
 #: gnucash/report/reports/standard/new-owner-report.scm:1068
 #, fuzzy
@@ -28169,9 +28144,8 @@ msgid "Display the Company Name?"
 msgstr "Számlanév megjelenítése?"
 
 #: gnucash/report/reports/standard/taxinvoice.scm:134
-#, fuzzy
 msgid "Invoice Number next to title?"
-msgstr "Számlaszám"
+msgstr "Számlaszám a cím mellett?"
 
 #: gnucash/report/reports/standard/taxinvoice.scm:135
 #, fuzzy
@@ -28179,14 +28153,12 @@ msgid "Display Job name?"
 msgstr "Számlanév megjelenítése?"
 
 #: gnucash/report/reports/standard/taxinvoice.scm:136
-#, fuzzy
 msgid "Invoice Job number?"
-msgstr "Számlaszám"
+msgstr ""
 
 #: gnucash/report/reports/standard/taxinvoice.scm:137
-#, fuzzy
 msgid "Show net price?"
-msgstr "Árak feltüntetése"
+msgstr "Nettó ár megjelenítése?"
 
 #: gnucash/report/reports/standard/taxinvoice.scm:154
 msgid "Name of a file containing a logo to be used on the report."
@@ -29176,9 +29148,8 @@ msgid ""
 msgstr ""
 
 #: gnucash/report/trep-engine.scm:637
-#, fuzzy
 msgid "Filter by reconcile status."
-msgstr "Tranzakciódátum megjelenítése?"
+msgstr ""
 
 #: gnucash/report/trep-engine.scm:644
 #, fuzzy
@@ -29224,18 +29195,16 @@ msgid "Show the account description for subheadings?"
 msgstr "Számlakód megjelenítése alösszegekhez és alcímekhez?"
 
 #: gnucash/report/trep-engine.scm:810
-#, fuzzy
 msgid "Show the informal headers for debit/credit accounts?"
-msgstr "Bevételi- és költségszámlák megjelenítése"
+msgstr ""
 
 #: gnucash/report/trep-engine.scm:817
 msgid "Add indenting columns with grouping and subtotals?"
 msgstr ""
 
 #: gnucash/report/trep-engine.scm:824
-#, fuzzy
 msgid "Show subtotals only, hiding transactional detail?"
-msgstr "Do not print transaction detail"
+msgstr ""
 
 #: gnucash/report/trep-engine.scm:831
 msgid "Subtotal according to the primary key?"
@@ -29280,30 +29249,24 @@ msgid "Display the notes if the memo is unavailable?"
 msgstr ""
 
 #: gnucash/report/trep-engine.scm:952 gnucash/report/trep-engine.scm:955
-#, fuzzy
 msgid "Display the full account name?"
-msgstr "Teljes számlanév megjelenítése"
+msgstr "Teljes számlanév megjelenítése?"
 
 #: gnucash/report/trep-engine.scm:953
-#, fuzzy
 msgid "Display the account code?"
-msgstr "Számlakód megjelenítése"
+msgstr "Számlakód megjelenítése?"
 
 #: gnucash/report/trep-engine.scm:956
-#, fuzzy
 msgid "Display the other account code?"
-msgstr "A másik számla kódjának megjelenítése"
+msgstr "A másik számla kódjának megjelenítése?"
 
 #: gnucash/report/trep-engine.scm:958
-#, fuzzy
-#| msgid "Display the transaction amount?"
 msgid "Display the transaction linked document"
-msgstr "Tranzakció összegének megjelenítése?"
+msgstr ""
 
 #: gnucash/report/trep-engine.scm:961
-#, fuzzy
 msgid "Display a subtotal summary table."
-msgstr "Feltüntessem a részletösszegeket?"
+msgstr "Részösszegek összefoglaló táblázatának megjelenítése."
 
 #: gnucash/report/trep-engine.scm:969
 #, fuzzy

commit 47b85d3b2fcf9bed4f68b46a94f764d8cd0f4581
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Mon Feb 27 05:29:08 2023 +0800

    [gnc-xml-backend.cpp] g_free char* from g_path_get_dirname

diff --git a/libgnucash/backend/xml/gnc-xml-backend.cpp b/libgnucash/backend/xml/gnc-xml-backend.cpp
index 03cc9b9b0..5a4ff4391 100644
--- a/libgnucash/backend/xml/gnc-xml-backend.cpp
+++ b/libgnucash/backend/xml/gnc-xml-backend.cpp
@@ -136,7 +136,10 @@ GncXmlBackend::session_begin(QofSession* session, const char* new_uri,
     if (!check_path(m_fullpath.c_str(),
                     mode == SESSION_NEW_STORE || mode == SESSION_NEW_OVERWRITE))
         return;
-    m_dirname = g_path_get_dirname (m_fullpath.c_str());
+
+    auto dirname = g_path_get_dirname (m_fullpath.c_str());
+    m_dirname = dirname;
+    g_free (dirname);
 
 
 



Summary of changes:
 gnucash/gnome/gnc-split-reg.c                      |   2 +
 gnucash/register/ledger-core/split-register-load.c |  17 ++-
 libgnucash/backend/xml/gnc-xml-backend.cpp         |   5 +-
 libgnucash/engine/Transaction.c                    | 161 ++++++---------------
 libgnucash/engine/TransactionP.h                   |  16 +-
 libgnucash/engine/kvp-frame.cpp                    |  43 ++----
 libgnucash/engine/kvp-value.hpp                    |  11 +-
 libgnucash/engine/mocks/gmock-Transaction.h        |   2 -
 libgnucash/engine/qofinstance.cpp                  |  10 +-
 po/glossary/hu.po                                  |   6 +-
 po/hu.po                                           | 129 ++++++-----------
 11 files changed, 139 insertions(+), 263 deletions(-)



More information about the gnucash-changes mailing list