I noticed this before while doing my find account dialogue, at the start of pull request 83 there is a patch for this and the account hidden setting.
On 22 September 2016 at 16:38, John Ralls <jra...@ceridwen.us> wrote: > > > On Sep 21, 2016, at 3:35 PM, Carsten Rinke <carsten.ri...@gmx.de> wrote: > > > > Hi, > > > > I try to make use of the "TaxRelated" flag of the accounts by calling > xaccAccountSetTaxRelated (Account.c). > > > > I notice that on master this does not lead to the same result as on > maint. > > > > To figure out what is wrong/different on master I simply added some > printouts: > > > > ========= snip start =========================== > > > > gboolean > > xaccAccountGetTaxRelated (const Account *acc) > > { > > GValue v = G_VALUE_INIT; > > g_return_val_if_fail(GNC_IS_ACCOUNT(acc), FALSE); > > qof_instance_get_kvp (QOF_INSTANCE(acc), "tax-related", &v); > > > > if (G_VALUE_HOLDS_BOOLEAN (&v)) > > printf("G_VALUE_HOLDS_BOOLEAN returns TRUE\n"); <============= > > else > > printf("G_VALUE_HOLDS_BOOLEAN returns FALSE, actually it is > %s\n",G_VALUE_TYPE_NAME(&v)); <============= > > > > if (g_value_get_boolean (&v)) > > printf("g_value_get_boolean returns TRUE\n"); <============= > > else > > printf("g_value_get_boolean returns FALSE\n"); <============= > > > > return G_VALUE_HOLDS_BOOLEAN (&v) ? g_value_get_boolean (&v) : FALSE; > > } > > > > void > > xaccAccountSetTaxRelated (Account *acc, gboolean tax_related) > > { > > if (tax_related) > > printf("Request to set TaxRelated TRUE\n"); <============= > > else > > printf("Request to set TaxRelated FALSE\n"); <============= > > > > GValue v = G_VALUE_INIT; > > g_return_if_fail(GNC_IS_ACCOUNT(acc)); > > > > g_value_init (&v, G_TYPE_BOOLEAN); > > g_value_set_boolean (&v, tax_related); > > > > xaccAccountBeginEdit(acc); > > qof_instance_set_kvp (QOF_INSTANCE (acc), "tax-related", &v); > > mark_account (acc); > > xaccAccountCommitEdit(acc); > > > > if (xaccAccountGetTaxRelated(acc)) > > printf("TaxRelated is now TRUE\n"); <============= > > else > > printf("TaxRelated is now FALSE\n"); <============= > > } > > > > =========== snip end ========================= > > > > The printout shows > > > > Request to set TaxRelated TRUE > > G_VALUE_HOLDS_BOOLEAN returns FALSE, actually it is gchararray > > g_value_get_boolean returns FALSE > > TaxRelated is now FALSE > > > > My suspicion: > > > > in kvp_frame.cpp in function > > > > KvpValue* > > kvp_value_from_gvalue (const GValue *gval) > > > > ============= snip start =========== > > else if (type == G_TYPE_BOOLEAN) > > { > > auto bval = g_value_get_boolean(gval); > > if (bval) > > val = new KvpValue(g_strdup("true")); > > ======= snip end ================= > > > > the information is lost that the origin is boolean. After this point I > get lost. > > > > What to do? Open a bug report? > > > > Carsten, > > Sorry, I meant to pick this up yesterday, but I was focussed on Geert's PR > and then forgot about it. > > There isn't a KVP_TYPE_BOOLEAN in maint or master. This is handled in > maint by testing for the existence of the slot; if it exists the value is > true, if it doesn't the value is false. The actual stored value is either > an int, as in the case of Account's tax-related key, or a string "true". > > When I made KVP private I tried to standardize on the string version as > that seemed to me to be more obvious when looking at a text XML file. It > looks like I screwed up at lease xaccAccountGetTaxRelated and perhaps > others. I'll look at fixing that right away. > > Regards, > John Ralls > > > _______________________________________________ > gnucash-devel mailing list > gnucash-devel@gnucash.org > https://lists.gnucash.org/mailman/listinfo/gnucash-devel > _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel