mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Drop the tree model before update find account tree view
To avoid delays with large account trees, drop the model from the find account tree view while it is being updated and then reconnect it after the model has been updated.
This commit is contained in:
parent
193176cc25
commit
85bb778610
@ -156,9 +156,8 @@ gnc_find_account_dialog_close_button_cb (GtkWidget * widget, gpointer user_data)
|
||||
}
|
||||
|
||||
static void
|
||||
fill_model (FindAccountDialog *facc_dialog, Account *account)
|
||||
fill_model (GtkTreeModel *model, Account *account)
|
||||
{
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter iter;
|
||||
gchar *fullname = gnc_account_get_full_name (account);
|
||||
gint splits = xaccAccountCountSplits (account, TRUE);
|
||||
@ -166,8 +165,6 @@ fill_model (FindAccountDialog *facc_dialog, Account *account)
|
||||
|
||||
PINFO("Add to Store: Account '%s'", fullname);
|
||||
|
||||
model = gtk_tree_view_get_model (GTK_TREE_VIEW(facc_dialog->view));
|
||||
|
||||
gtk_list_store_append (GTK_LIST_STORE(model), &iter);
|
||||
|
||||
gtk_list_store_set (GTK_LIST_STORE(model), &iter,
|
||||
@ -187,6 +184,7 @@ get_account_info (FindAccountDialog *facc_dialog)
|
||||
GList *ptr;
|
||||
gchar *filter_text;
|
||||
gboolean radio_root;
|
||||
GtkTreeModel *model;
|
||||
|
||||
/* Get the state of the root radio button */
|
||||
radio_root = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(facc_dialog->radio_root));
|
||||
@ -201,6 +199,14 @@ get_account_info (FindAccountDialog *facc_dialog)
|
||||
|
||||
filter_text = g_ascii_strdown (gtk_entry_get_text (GTK_ENTRY(facc_dialog->filter_text_entry)), -1);
|
||||
|
||||
/* disconnect the model from the treeview */
|
||||
model = gtk_tree_view_get_model (GTK_TREE_VIEW(facc_dialog->view));
|
||||
g_object_ref (G_OBJECT(model));
|
||||
gtk_tree_view_set_model (GTK_TREE_VIEW(facc_dialog->view), NULL);
|
||||
|
||||
// Clear the list store
|
||||
gtk_list_store_clear (GTK_LIST_STORE(model));
|
||||
|
||||
/* Go through list of accounts */
|
||||
for (ptr = accts; ptr; ptr = g_list_next (ptr))
|
||||
{
|
||||
@ -209,7 +215,7 @@ get_account_info (FindAccountDialog *facc_dialog)
|
||||
gchar *match_string = g_ascii_strdown (full_name, -1);
|
||||
|
||||
if ((g_strcmp0 (filter_text, "") == 0) || (g_strrstr (match_string, filter_text) != NULL))
|
||||
fill_model (facc_dialog, acc);
|
||||
fill_model (model, acc);
|
||||
|
||||
g_free (match_string);
|
||||
g_free (full_name);
|
||||
@ -217,17 +223,16 @@ get_account_info (FindAccountDialog *facc_dialog)
|
||||
g_free (filter_text);
|
||||
g_list_free (accts);
|
||||
|
||||
/* reconnect the model to the treeview */
|
||||
gtk_tree_view_set_model (GTK_TREE_VIEW(facc_dialog->view), model);
|
||||
g_object_unref(G_OBJECT(model));
|
||||
|
||||
gtk_tree_view_columns_autosize (GTK_TREE_VIEW(facc_dialog->view));
|
||||
}
|
||||
|
||||
static void
|
||||
filter_button_cb (GtkButton *button, FindAccountDialog *facc_dialog)
|
||||
{
|
||||
GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW(facc_dialog->view));
|
||||
|
||||
// Clear the list store
|
||||
gtk_list_store_clear (GTK_LIST_STORE(model));
|
||||
|
||||
get_account_info (facc_dialog);
|
||||
|
||||
// Clear the filter
|
||||
|
Loading…
Reference in New Issue
Block a user