diff --git a/src/business/business-core/gncBillTerm.c b/src/business/business-core/gncBillTerm.c index 40ef2daabb..11d01369d1 100644 --- a/src/business/business-core/gncBillTerm.c +++ b/src/business/business-core/gncBillTerm.c @@ -60,6 +60,7 @@ struct _book_info { static void add_or_rem_object (GncBillTerm *term, gboolean add); static void addObj (GncBillTerm *term); static void remObj (GncBillTerm *term); +static void maybe_resort_list (GncBillTerm *term); G_INLINE_FUNC void mark_term (GncBillTerm *term); G_INLINE_FUNC void @@ -115,6 +116,7 @@ void gncBillTermSetName (GncBillTerm *term, const char *name) if (!term || !name) return; SET_STR (term->name, name); mark_term (term); + maybe_resort_list (term); } void gncBillTermSetDescription (GncBillTerm *term, const char *desc) @@ -122,6 +124,7 @@ void gncBillTermSetDescription (GncBillTerm *term, const char *desc) if (!term || !desc) return; SET_STR (term->desc, desc); mark_term (term); + maybe_resort_list (term); } void gncBillTermSetType (GncBillTerm *term, GncBillTermType type) @@ -360,7 +363,7 @@ int gncBillTermCompare (GncBillTerm *a, GncBillTerm *b) if (!b) return 1; ret = safe_strcmp (a->name, b->name); - if (!ret) return ret; + if (ret) return ret; return safe_strcmp (a->desc, b->desc); } @@ -451,6 +454,15 @@ gncBillTermComputeDiscountDate (GncBillTerm *term, Timespec post_date) /* Package-Private functions */ +static void maybe_resort_list (GncBillTerm *term) +{ + struct _book_info *bi; + + if (term->parent || term->invisible) return; + bi = gnc_book_get_data (term->book, _GNC_MOD_NAME); + bi->terms = g_list_sort (bi->terms, (GCompareFunc)gncBillTermCompare); +} + static void add_or_rem_object (GncBillTerm *term, gboolean add) { struct _book_info *bi; diff --git a/src/business/business-core/gncTaxTable.c b/src/business/business-core/gncTaxTable.c index 9d90895b7e..c70ae8f478 100644 --- a/src/business/business-core/gncTaxTable.c +++ b/src/business/business-core/gncTaxTable.c @@ -63,6 +63,7 @@ struct _book_info { static void add_or_rem_object (GncTaxTable *table, gboolean add); static void addObj (GncTaxTable *table); static void remObj (GncTaxTable *table); +static void maybe_resort_list (GncTaxTable *table); G_INLINE_FUNC void mark_table (GncTaxTable *table); G_INLINE_FUNC void @@ -142,6 +143,7 @@ void gncTaxTableSetName (GncTaxTable *table, const char *name) if (!table || !name) return; SET_STR (table->name, name); mark_table (table); + maybe_resort_list (table); } void gncTaxTableSetParent (GncTaxTable *table, GncTaxTable *parent) @@ -497,6 +499,15 @@ void gncAccountValueDestroy (GList *list) /* Package-Private functions */ +static void maybe_resort_list (GncTaxTable *table) +{ + struct _book_info *bi; + + if (table->parent || table->invisible) return; + bi = gnc_book_get_data (table->book, _GNC_MOD_NAME); + bi->tables = g_list_sort (bi->tables, (GCompareFunc)gncTaxTableCompare); +} + static void add_or_rem_object (GncTaxTable *table, gboolean add) { struct _book_info *bi;