gnucash maint: Multiple changes pushed
Christopher Lam
clam at code.gnucash.org
Wed Feb 24 07:34:24 EST 2021
Updated via https://github.com/Gnucash/gnucash/commit/686f842c (commit)
via https://github.com/Gnucash/gnucash/commit/422c151a (commit)
via https://github.com/Gnucash/gnucash/commit/f743f24e (commit)
via https://github.com/Gnucash/gnucash/commit/b767d160 (commit)
via https://github.com/Gnucash/gnucash/commit/e79db92d (commit)
via https://github.com/Gnucash/gnucash/commit/0a22f688 (commit)
via https://github.com/Gnucash/gnucash/commit/b2b87921 (commit)
via https://github.com/Gnucash/gnucash/commit/b73cacd5 (commit)
from https://github.com/Gnucash/gnucash/commit/910da534 (commit)
commit 686f842c3d6d14a9e7c17222c16a22e00ce435c6
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Wed Feb 24 20:25:30 2021 +0800
Bug 798135 - GtkEntry text with search list: shows selected entry again for no reason
Because setting the GtkEntry to inline completion gtk_entry_completion_set_inline_completion (completion, TRUE)
diff --git a/gnucash/gnome-search/gnc-general-search.c b/gnucash/gnome-search/gnc-general-search.c
index deed45287..8e4ab873a 100644
--- a/gnucash/gnome-search/gnc-general-search.c
+++ b/gnucash/gnome-search/gnc-general-search.c
@@ -398,7 +398,6 @@ create_children (GNCGeneralSearch *gsl,
completion = gtk_entry_completion_new();
gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(list_store));
gtk_entry_completion_set_text_column(completion, 0);
- gtk_entry_completion_set_inline_completion(completion, TRUE);
gtk_entry_set_completion(GTK_ENTRY(gsl->entry), completion);
g_signal_connect (G_OBJECT (completion), "match_selected",
diff --git a/gnucash/gnome-utils/gnc-gtk-utils.c b/gnucash/gnome-utils/gnc-gtk-utils.c
index f8bcaea1c..2dca606f5 100644
--- a/gnucash/gnome-utils/gnc-gtk-utils.c
+++ b/gnucash/gnome-utils/gnc-gtk-utils.c
@@ -178,7 +178,6 @@ gnc_cbwe_add_completion (GtkComboBox *cbwe)
model = gtk_combo_box_get_model(GTK_COMBO_BOX(cbwe));
gtk_entry_completion_set_model(completion, model);
gtk_entry_completion_set_text_column(completion, 0);
- gtk_entry_completion_set_inline_completion(completion, TRUE);
gtk_entry_set_completion(entry, completion);
g_object_unref(completion);
}
commit 422c151a0378537bae8603fc846b9c33bb0c8576
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Mon Feb 22 20:50:48 2021 +0800
[window-main-summarybar.c] use g_list_free_full
diff --git a/gnucash/gnome-utils/window-main-summarybar.c b/gnucash/gnome-utils/window-main-summarybar.c
index a1f39da52..4765ea62a 100644
--- a/gnucash/gnome-utils/window-main-summarybar.c
+++ b/gnucash/gnome-utils/window-main-summarybar.c
@@ -432,14 +432,7 @@ gnc_main_window_summary_refresh (GNCMainSummary * summary)
gtk_combo_box_set_active(GTK_COMBO_BOX(summary->totals_combo), 0);
}
- /* Free the list we created for this */
- for (current = g_list_first(currency_list);
- current;
- current = g_list_next(current))
- {
- g_free(current->data);
- }
- g_list_free(currency_list);
+ g_list_free_full (currency_list, g_free);
}
static gchar*
commit f743f24e7ed4b5bbc7916d9c301e06ca4177a7dd
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Mon Feb 22 19:00:11 2021 +0800
[gnc-tree-model-split-reg.c] don't call g_list_length
use model->number_of_trans_in_full_tlist instead which has already
stored the length.
diff --git a/gnucash/gnome-utils/gnc-tree-model-split-reg.c b/gnucash/gnome-utils/gnc-tree-model-split-reg.c
index 32167941f..943a43c9c 100644
--- a/gnucash/gnome-utils/gnc-tree-model-split-reg.c
+++ b/gnucash/gnome-utils/gnc-tree-model-split-reg.c
@@ -638,7 +638,7 @@ gnc_tree_model_split_reg_load (GncTreeModelSplitReg *model, GList *slist, Accoun
model->number_of_trans_in_full_tlist = g_list_length (priv->full_tlist);
- if (g_list_length (priv->full_tlist) < NUM_OF_TRANS*3)
+ if (model->number_of_trans_in_full_tlist < NUM_OF_TRANS*3)
{
// Copy the full_tlist to tlist
priv->tlist = g_list_copy (priv->full_tlist);
@@ -647,8 +647,11 @@ gnc_tree_model_split_reg_load (GncTreeModelSplitReg *model, GList *slist, Accoun
{
if (model->position_of_trans_in_full_tlist < (NUM_OF_TRANS*3))
gtm_sr_reg_load (model, VIEW_HOME, NUM_OF_TRANS*3);
- else if (model->position_of_trans_in_full_tlist > g_list_length (priv->full_tlist) - (NUM_OF_TRANS*3))
+
+ else if (model->position_of_trans_in_full_tlist >
+ model->number_of_trans_in_full_tlist - (NUM_OF_TRANS*3))
gtm_sr_reg_load (model, VIEW_END, NUM_OF_TRANS*3);
+
else
gtm_sr_reg_load (model, VIEW_GOTO, model->position_of_trans_in_full_tlist);
}
commit b767d16059d8f40f9cec6ab92bad8f961278bacc
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Mon Feb 22 18:59:02 2021 +0800
[gnc-tree-model-split-reg.c] use xaccSplitListGetUniqueTransactionsReversed
which is then reversed if required. this removes the need for double
reversal.
diff --git a/gnucash/gnome-utils/gnc-tree-model-split-reg.c b/gnucash/gnome-utils/gnc-tree-model-split-reg.c
index dbfa7d2ad..32167941f 100644
--- a/gnucash/gnome-utils/gnc-tree-model-split-reg.c
+++ b/gnucash/gnome-utils/gnc-tree-model-split-reg.c
@@ -624,25 +624,14 @@ gnc_tree_model_split_reg_load (GncTreeModelSplitReg *model, GList *slist, Accoun
if (model->current_trans == NULL)
model->current_trans = priv->btrans;
- if (model->sort_direction == GTK_SORT_ASCENDING)
- {
- /* Get a list of Unique Transactions from an slist */
- priv->full_tlist = xaccSplitListGetUniqueTransactions (slist);
-
- /* Add the blank transaction to the full_tlist */
- priv->full_tlist = g_list_append (priv->full_tlist, priv->btrans);
- }
- else
- {
- /* Get a list of Unique Transactions from an slist */
- priv->full_tlist = xaccSplitListGetUniqueTransactions (slist);
+ /* Get a list of Unique Transactions from an slist */
+ priv->full_tlist = xaccSplitListGetUniqueTransactionsReversed (slist);
- /* Add the blank transaction to the full_tlist */
- priv->full_tlist = g_list_append (priv->full_tlist, priv->btrans);
+ /* Add the blank transaction to the full_tlist */
+ priv->full_tlist = g_list_prepend (priv->full_tlist, priv->btrans);
- /* Reverse the full_tlist */
+ if (model->sort_direction == GTK_SORT_ASCENDING)
priv->full_tlist = g_list_reverse (priv->full_tlist);
- }
// Update the scrollbar
gnc_tree_model_split_reg_sync_scrollbar (model);
commit e79db92d8d1ec067e629247b32a8d674ffceb4e7
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Mon Feb 22 18:17:02 2021 +0800
[Split.c] xaccSplitListGetUniqueTransactionsReversed
Same as xaccSplitListGetUniqueTransactions but doesn't reverse the
list prior to returning. To be used by gnc-tree-model-split-reg.c
Several optimizations
* doesn't call g_list_find and g_list_append for every iteration
* uses g_hash_table to cache list of txns already added instead of g_list_find
* does not reverse the result, thereby returning a reversed list.
diff --git a/libgnucash/engine/Split.c b/libgnucash/engine/Split.c
index 4f74b3709..5b3ecd6a3 100644
--- a/libgnucash/engine/Split.c
+++ b/libgnucash/engine/Split.c
@@ -893,21 +893,32 @@ xaccSplitEqual(const Split *sa, const Split *sb,
* xaccSplitListGetUniqueTransactions
********************************************************************/
GList *
-xaccSplitListGetUniqueTransactions(const GList *splits)
+xaccSplitListGetUniqueTransactionsReversed (const GList *splits)
{
- const GList *snode;
+ GHashTable *txn_hash = g_hash_table_new (NULL, NULL);
GList *transList = NULL;
+ const GList *snode;
- for(snode = splits; snode; snode = snode->next)
+ for (snode = splits; snode; snode = snode->next)
{
Transaction *trans = xaccSplitGetParent((Split *)(snode->data));
- GList *item = g_list_find (transList, trans);
- if (item == NULL)
- transList = g_list_append (transList, trans);
+ if (g_hash_table_contains (txn_hash, trans))
+ continue;
+
+ g_hash_table_insert (txn_hash, trans, NULL);
+ transList = g_list_prepend (transList, trans);
}
+ g_hash_table_destroy (txn_hash);
return transList;
}
+
+GList *
+xaccSplitListGetUniqueTransactions(const GList *splits)
+{
+ return g_list_reverse (xaccSplitListGetUniqueTransactionsReversed (splits));
+}
+
/*################## Added for Reg2 #################*/
diff --git a/libgnucash/engine/Split.h b/libgnucash/engine/Split.h
index 7f2e2025f..fffc8409c 100644
--- a/libgnucash/engine/Split.h
+++ b/libgnucash/engine/Split.h
@@ -359,6 +359,7 @@ Split * xaccSplitLookup (const GncGUID *guid, QofBook *book);
/*################## Added for Reg2 #################*/
/* Get a GList of unique transactions containing the given list of Splits. */
+GList *xaccSplitListGetUniqueTransactionsReversed (const GList *splits);
GList *xaccSplitListGetUniqueTransactions(const GList *splits);
/*################## Added for Reg2 #################*/
/** Add a peer split to this split's lot-split list.
commit 0a22f688a64271ec12c2937558d83a0f4b5c62fd
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Mon Feb 22 18:16:16 2021 +0800
plug memory leaks
diff --git a/gnucash/gnome/dialog-lot-viewer.c b/gnucash/gnome/dialog-lot-viewer.c
index f9e004fbc..8413b9c1f 100644
--- a/gnucash/gnome/dialog-lot-viewer.c
+++ b/gnucash/gnome/dialog-lot-viewer.c
@@ -234,6 +234,7 @@ lv_show_splits_free (GNCLotViewer *lv)
/* display list */
gnc_split_viewer_fill(lv, lv->split_free_store, g_list_reverse (filtered_list));
+ g_list_free (filtered_list);
}
/* ======================================================================== */
diff --git a/gnucash/gnome/gnc-plugin-page-register.c b/gnucash/gnome/gnc-plugin-page-register.c
index 6a7390848..c801aa9f4 100644
--- a/gnucash/gnome/gnc-plugin-page-register.c
+++ b/gnucash/gnome/gnc-plugin-page-register.c
@@ -3785,6 +3785,7 @@ gnc_plugin_page_register_cmd_print_check (GtkAction* action,
}
}
gnc_ui_print_check_dialog_create (window, splits);
+ g_list_free (splits);
}
else
{
@@ -5368,6 +5369,7 @@ gppr_account_destroy_cb (Account* account)
page = (GncPluginPageRegister*)item->data;
gnc_main_window_close_page (GNC_PLUGIN_PAGE (page));
}
+ g_list_free (kill);
}
/** This function is the handler for all event messages from the
diff --git a/gnucash/gnome/gnc-plugin-page-register2.c b/gnucash/gnome/gnc-plugin-page-register2.c
index 034a8a8d0..baca8c602 100644
--- a/gnucash/gnome/gnc-plugin-page-register2.c
+++ b/gnucash/gnome/gnc-plugin-page-register2.c
@@ -2677,6 +2677,7 @@ gnc_plugin_page_register2_cmd_print_check (GtkAction *action,
}
}
gnc_ui_print_check_dialog_create (window, splits);
+ g_list_free (splits);
}
else
{
@@ -4027,6 +4028,7 @@ gppr_account_destroy_cb (Account *account)
page = (GncPluginPageRegister2 *)item->data;
gnc_main_window_close_page(GNC_PLUGIN_PAGE(page));
}
+ g_list_free (kill);
}
/** This function is the handler for all event messages from the
commit b2b87921107132c98ee2d69221d944195aa29008
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Mon Feb 22 18:13:21 2021 +0800
prepend-and-reverse instead of O(N^2) append
diff --git a/gnucash/gnome-utils/gnc-sx-instance-dense-cal-adapter.c b/gnucash/gnome-utils/gnc-sx-instance-dense-cal-adapter.c
index ea9fbcd24..c71c2a0a2 100644
--- a/gnucash/gnome-utils/gnc-sx-instance-dense-cal-adapter.c
+++ b/gnucash/gnome-utils/gnc-sx-instance-dense-cal-adapter.c
@@ -192,11 +192,10 @@ gsidca_get_contained(GncDenseCalModel *model)
{
GncSxInstances *sx_instances = (GncSxInstances*)sxes->data;
if (xaccSchedXactionGetEnabled(sx_instances->sx))
- {
- list = g_list_append(list, GUINT_TO_POINTER(GPOINTER_TO_UINT(sx_instances->sx)));
- }
+ list = g_list_prepend (list, GUINT_TO_POINTER
+ (GPOINTER_TO_UINT (sx_instances->sx)));
}
- return list;
+ return g_list_reverse (list);
}
static gchar*
diff --git a/gnucash/gnome-utils/gnc-tree-view-account.c b/gnucash/gnome-utils/gnc-tree-view-account.c
index 0da39e117..0c7a79f15 100644
--- a/gnucash/gnome-utils/gnc-tree-view-account.c
+++ b/gnucash/gnome-utils/gnc-tree-view-account.c
@@ -1557,7 +1557,7 @@ get_selected_accounts_helper (GtkTreeModel *s_model,
/* Only selected if it passes the filter */
if (gtvsi->priv->filter_fn == NULL || gtvsi->priv->filter_fn(account, gtvsi->priv->filter_data))
{
- gtvsi->return_list = g_list_append(gtvsi->return_list, account);
+ gtvsi->return_list = g_list_prepend (gtvsi->return_list, account);
}
}
@@ -1580,6 +1580,7 @@ gnc_tree_view_account_get_selected_accounts (GncTreeViewAccount *view)
info.priv = GNC_TREE_VIEW_ACCOUNT_GET_PRIVATE(view);
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view));
gtk_tree_selection_selected_foreach(selection, get_selected_accounts_helper, &info);
+ info.return_list = g_list_reverse (info.return_list);
return info.return_list;
}
diff --git a/gnucash/gnome/assistant-loan.cpp b/gnucash/gnome/assistant-loan.cpp
index aed5ba46e..04d0e604d 100644
--- a/gnucash/gnome/assistant-loan.cpp
+++ b/gnucash/gnome/assistant-loan.cpp
@@ -3014,13 +3014,15 @@ loan_create_sxes( LoanAssistantData *ldd )
g_string_free( gstr, TRUE );
gstr = NULL;
- repaySXes = g_list_append( repaySXes, tcSX );
+ repaySXes = g_list_prepend (repaySXes, tcSX);
}
/* repayment */
ld_setup_repayment_sx( ldd, rod, paymentSX, tcSX );
}
+
+ repaySXes = g_list_reverse (repaySXes);
/* Create the SXes */
{
GList *l;
diff --git a/gnucash/gnome/dialog-imap-editor.c b/gnucash/gnome/dialog-imap-editor.c
index d97b6d69e..cd4a70bef 100644
--- a/gnucash/gnome/dialog-imap-editor.c
+++ b/gnucash/gnome/dialog-imap-editor.c
@@ -308,7 +308,7 @@ find_invalid_mappings (GtkTreeModel *model, GtkTreePath *path,
if (((g_strcmp0 (head, "online_id") == 0) && (depth == 1)) || (depth == 2))
{
GtkTreeRowReference *rowref = gtk_tree_row_reference_new (model, path);
- *rowref_list = g_list_append (*rowref_list, rowref);
+ *rowref_list = g_list_prepend (*rowref_list, rowref);
}
}
g_free (head);
@@ -325,9 +325,6 @@ gnc_imap_remove_invalid_maps (ImapDialog *imap_dialog)
(GtkTreeModelForeachFunc)find_invalid_mappings,
&rr_list);
- // reverse the reference list
- rr_list = g_list_reverse (rr_list);
-
// Suspend GUI refreshing
gnc_suspend_gui_refresh();
diff --git a/gnucash/gnome/dialog-lot-viewer.c b/gnucash/gnome/dialog-lot-viewer.c
index 68fc900f2..f9e004fbc 100644
--- a/gnucash/gnome/dialog-lot-viewer.c
+++ b/gnucash/gnome/dialog-lot-viewer.c
@@ -228,12 +228,12 @@ lv_show_splits_free (GNCLotViewer *lv)
Split *split = node->data;
if (NULL == xaccSplitGetLot(split))
{
- filtered_list = g_list_append(filtered_list, split);
+ filtered_list = g_list_prepend (filtered_list, split);
}
}
/* display list */
- gnc_split_viewer_fill(lv, lv->split_free_store, filtered_list);
+ gnc_split_viewer_fill(lv, lv->split_free_store, g_list_reverse (filtered_list));
}
/* ======================================================================== */
diff --git a/gnucash/gnome/gnc-budget-view.c b/gnucash/gnome/gnc-budget-view.c
index ad4d5aae3..43faf78f8 100644
--- a/gnucash/gnome/gnc-budget-view.c
+++ b/gnucash/gnome/gnc-budget-view.c
@@ -1629,7 +1629,7 @@ gnc_budget_view_refresh (GncBudgetView *budget_view)
if (col != NULL)
{
gtk_tree_view_append_column (priv->totals_tree_view, col);
- totals_col_list = g_list_append (totals_col_list, col);
+ totals_col_list = g_list_prepend (totals_col_list, col);
}
num_periods_visible = g_list_length (col_list);
@@ -1639,7 +1639,7 @@ gnc_budget_view_refresh (GncBudgetView *budget_view)
gdk_rgba_free (note_color_selected);
priv->period_col_list = col_list;
- priv->totals_col_list = totals_col_list;
+ priv->totals_col_list = g_list_reverse (totals_col_list);
if (priv->total_col == NULL)
{
diff --git a/gnucash/gnome/gnc-plugin-page-register.c b/gnucash/gnome/gnc-plugin-page-register.c
index 100953f8d..6a7390848 100644
--- a/gnucash/gnome/gnc-plugin-page-register.c
+++ b/gnucash/gnome/gnc-plugin-page-register.c
@@ -3722,7 +3722,7 @@ gnc_plugin_page_register_cmd_print_check (GtkAction* action,
{
if (xaccSplitGetAccount (split) == account)
{
- splits = g_list_append (splits, split);
+ splits = g_list_prepend (splits, split);
gnc_ui_print_check_dialog_create (window, splits);
g_list_free (splits);
}
@@ -3733,7 +3733,7 @@ gnc_plugin_page_register_cmd_print_check (GtkAction* action,
split = gnc_split_register_get_current_trans_split (reg, NULL);
if (split)
{
- splits = g_list_append (splits, split);
+ splits = g_list_prepend (splits, split);
gnc_ui_print_check_dialog_create (window, splits);
g_list_free (splits);
}
@@ -5349,18 +5349,19 @@ gppr_account_destroy_cb (Account* account)
ledger_type = gnc_ledger_display_type (priv->ledger);
if (ledger_type == LD_GL)
{
- kill = g_list_append (kill, page);
+ kill = g_list_prepend (kill, page);
/* kill it */
}
else if ((ledger_type == LD_SINGLE) || (ledger_type == LD_SUBACCOUNT))
{
if (guid_compare (acct_guid, &priv->key) == 0)
{
- kill = g_list_append (kill, page);
+ kill = g_list_prepend (kill, page);
}
}
}
+ kill = g_list_reverse (kill);
/* Now kill them. */
for (item = kill; item; item = g_list_next (item))
{
diff --git a/gnucash/gnome/gnc-plugin-page-register2.c b/gnucash/gnome/gnc-plugin-page-register2.c
index da9cb4c29..034a8a8d0 100644
--- a/gnucash/gnome/gnc-plugin-page-register2.c
+++ b/gnucash/gnome/gnc-plugin-page-register2.c
@@ -2614,7 +2614,7 @@ gnc_plugin_page_register2_cmd_print_check (GtkAction *action,
{
if (xaccSplitGetAccount(split) == account)
{
- splits = g_list_append(splits, split);
+ splits = g_list_prepend (splits, split);
gnc_ui_print_check_dialog_create (window, splits);
g_list_free(splits);
}
@@ -2625,7 +2625,7 @@ gnc_plugin_page_register2_cmd_print_check (GtkAction *action,
split = gnc_tree_model_split_reg_trans_get_split_equal_to_ancestor(trans, account);
if (split)
{
- splits = g_list_append(splits, split);
+ splits = g_list_prepend (splits, split);
gnc_ui_print_check_dialog_create (window, splits);
g_list_free(splits);
}
@@ -4008,18 +4008,19 @@ gppr_account_destroy_cb (Account *account)
ledger_type = gnc_ledger_display2_type (priv->ledger);
if (ledger_type == LD2_GL)
{
- kill = g_list_append(kill, page);
+ kill = g_list_prepend (kill, page);
/* kill it */
}
else if ((ledger_type == LD2_SINGLE) || (ledger_type == LD2_SUBACCOUNT))
{
if (guid_compare(acct_guid, &priv->key) == 0)
{
- kill = g_list_append(kill, page);
+ kill = g_list_prepend (kill, page);
}
}
}
+ kill = g_list_reverse (kill);
/* Now kill them. */
for (item = kill; item; item = g_list_next(item))
{
diff --git a/libgnucash/app-utils/gnc-sx-instance-model.c b/libgnucash/app-utils/gnc-sx-instance-model.c
index 465cf68df..f281f40b8 100644
--- a/libgnucash/app-utils/gnc-sx-instance-model.c
+++ b/libgnucash/app-utils/gnc-sx-instance-model.c
@@ -522,9 +522,10 @@ gnc_sx_get_instances(const GDate *range_end, gboolean include_disabled)
SchedXaction *sx = (SchedXaction*)sx_iter->data;
if (xaccSchedXactionGetEnabled(sx))
{
- enabled_sxes = g_list_append(enabled_sxes, sx);
+ enabled_sxes = g_list_prepend (enabled_sxes, sx);
}
}
+ enabled_sxes = g_list_reverse (enabled_sxes);
instances->sx_instance_list = gnc_g_list_map(enabled_sxes, (GncGMapFunc)_gnc_sx_gen_instances, (gpointer)range_end);
g_list_free(enabled_sxes);
}
diff --git a/libgnucash/core-utils/gnc-glib-utils.c b/libgnucash/core-utils/gnc-glib-utils.c
index 836678ca1..b45292151 100644
--- a/libgnucash/core-utils/gnc-glib-utils.c
+++ b/libgnucash/core-utils/gnc-glib-utils.c
@@ -265,9 +265,9 @@ gnc_g_list_map(GList* list, GncGMapFunc fn, gpointer user_data)
GList *rtn = NULL;
for (; list != NULL; list = list->next)
{
- rtn = g_list_append(rtn, (*fn)(list->data, user_data));
+ rtn = g_list_prepend (rtn, (*fn)(list->data, user_data));
}
- return rtn;
+ return g_list_reverse (rtn);
}
void
diff --git a/libgnucash/engine/SX-book.c b/libgnucash/engine/SX-book.c
index b5465992d..e15cb57f0 100644
--- a/libgnucash/engine/SX-book.c
+++ b/libgnucash/engine/SX-book.c
@@ -380,12 +380,12 @@ gnc_sx_get_sxes_referencing_account(QofBook *book, Account *acct)
GncGUID *guid = NULL;
qof_instance_get (QOF_INSTANCE (s), "sx-account", &guid, NULL);
if (guid_equal(acct_guid, guid))
- rtn = g_list_append(rtn, sx);
+ rtn = g_list_prepend (rtn, sx);
guid_free (guid);
}
}
- return rtn;
+ return g_list_reverse (rtn);
}
/* ========================== END OF FILE =============================== */
diff --git a/libgnucash/engine/ScrubBusiness.c b/libgnucash/engine/ScrubBusiness.c
index 6adb52a19..d775157ef 100644
--- a/libgnucash/engine/ScrubBusiness.c
+++ b/libgnucash/engine/ScrubBusiness.c
@@ -400,9 +400,10 @@ gncScrubLotDanglingPayments (GNCLot *lot)
if (gnc_numeric_compare (gnc_numeric_abs (free_val), gnc_numeric_abs (ll_val)) > 0)
continue;
- filtered_list = g_list_append(filtered_list, free_split);
+ filtered_list = g_list_prepend (filtered_list, free_split);
}
+ filtered_list = g_list_reverse (filtered_list);
match_list = gncSLFindOffsSplits (filtered_list, ll_val);
g_list_free (filtered_list);
diff --git a/libgnucash/engine/Transaction.c b/libgnucash/engine/Transaction.c
index 6cd2e855a..1635ba277 100644
--- a/libgnucash/engine/Transaction.c
+++ b/libgnucash/engine/Transaction.c
@@ -569,7 +569,7 @@ xaccTransSortSplits (Transaction *trans)
split = node->data;
if (gnc_numeric_negative_p (xaccSplitGetValue(split)))
continue;
- new_list = g_list_append(new_list, split);
+ new_list = g_list_prepend (new_list, split);
}
/* then credits */
@@ -578,12 +578,12 @@ xaccTransSortSplits (Transaction *trans)
split = node->data;
if (!gnc_numeric_negative_p (xaccSplitGetValue(split)))
continue;
- new_list = g_list_append(new_list, split);
+ new_list = g_list_prepend (new_list, split);
}
/* install newly sorted list */
g_list_free(trans->splits);
- trans->splits = new_list;
+ trans->splits = g_list_reverse (new_list);
}
diff --git a/libgnucash/engine/gncCustomer.c b/libgnucash/engine/gncCustomer.c
index b7c547d94..7d0c47939 100644
--- a/libgnucash/engine/gncCustomer.c
+++ b/libgnucash/engine/gncCustomer.c
@@ -705,9 +705,9 @@ GList * gncCustomerGetJoblist (const GncCustomer *cust, gboolean show_all)
{
GncJob *j = iterator->data;
if (gncJobGetActive (j))
- list = g_list_append (list, j);
+ list = g_list_prepend (list, j);
}
- return list;
+ return g_list_reverse (list);
}
}
commit b73cacd58c1a79987f39b567e2a77a2c57499b19
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Mon Feb 22 18:11:53 2021 +0800
[gnc-recurrence.c] avoid O(N^2) children traversal
* each loop iteration called g_list_length and g_list_nth_data
better to forloop scan children instead
diff --git a/gnucash/gnome-utils/gnc-recurrence.c b/gnucash/gnome-utils/gnc-recurrence.c
index ceeab66bc..7a9b3f4ba 100644
--- a/gnucash/gnome-utils/gnc-recurrence.c
+++ b/gnucash/gnome-utils/gnc-recurrence.c
@@ -517,20 +517,15 @@ GList *
gnc_recurrence_comp_get_list(GncRecurrenceComp *grc)
{
GList *rlist = NULL, *children;
- gint i;
-
children = gtk_container_get_children(GTK_CONTAINER(grc->vbox));
- for (i = 0; i < g_list_length(children); i++)
+ for (GList *n = children; n; n = n->next)
{
- GncRecurrence *gr;
- const Recurrence *r;
- gr = GNC_RECURRENCE(g_list_nth_data(children, i));
- r = gnc_recurrence_get(gr);
- rlist = g_list_append(rlist, (gpointer)r);
+ const Recurrence *r = gnc_recurrence_get (GNC_RECURRENCE (n->data));
+ rlist = g_list_prepend (rlist, (gpointer)r);
}
g_list_free(children);
- return rlist;
+ return g_list_reverse (rlist);
}
Summary of changes:
gnucash/gnome-search/gnc-general-search.c | 1 -
gnucash/gnome-utils/gnc-gtk-utils.c | 1 -
gnucash/gnome-utils/gnc-recurrence.c | 13 ++++------
.../gnc-sx-instance-dense-cal-adapter.c | 7 +++---
gnucash/gnome-utils/gnc-tree-model-split-reg.c | 28 ++++++++--------------
gnucash/gnome-utils/gnc-tree-view-account.c | 3 ++-
gnucash/gnome-utils/window-main-summarybar.c | 9 +------
gnucash/gnome/assistant-loan.cpp | 4 +++-
gnucash/gnome/dialog-imap-editor.c | 5 +---
gnucash/gnome/dialog-lot-viewer.c | 5 ++--
gnucash/gnome/gnc-budget-view.c | 4 ++--
gnucash/gnome/gnc-plugin-page-register.c | 11 +++++----
gnucash/gnome/gnc-plugin-page-register2.c | 11 +++++----
libgnucash/app-utils/gnc-sx-instance-model.c | 3 ++-
libgnucash/core-utils/gnc-glib-utils.c | 4 ++--
libgnucash/engine/SX-book.c | 4 ++--
libgnucash/engine/ScrubBusiness.c | 3 ++-
libgnucash/engine/Split.c | 23 +++++++++++++-----
libgnucash/engine/Split.h | 1 +
libgnucash/engine/Transaction.c | 6 ++---
libgnucash/engine/gncCustomer.c | 4 ++--
21 files changed, 74 insertions(+), 76 deletions(-)
More information about the gnucash-changes
mailing list