From de9c0eb5408ed1f90fd36abc4f1d2d4a7bc4af0a Mon Sep 17 00:00:00 2001 From: John Ralls Date: Mon, 27 Feb 2023 10:11:06 -0800 Subject: [PATCH] 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. --- gnucash/gnome/gnc-split-reg.c | 2 ++ .../register/ledger-core/split-register-load.c | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/gnucash/gnome/gnc-split-reg.c b/gnucash/gnome/gnc-split-reg.c index d6c37ce177..38cf709a7a 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 a86250be0b..99d8df6bd8 100644 --- a/gnucash/register/ledger-core/split-register-load.c +++ b/gnucash/register/ledger-core/split-register-load.c @@ -25,7 +25,11 @@ #include #include +#include +#include +#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 */