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
|
static void
|
||||||
fill_model (FindAccountDialog *facc_dialog, Account *account)
|
fill_model (GtkTreeModel *model, Account *account)
|
||||||
{
|
{
|
||||||
GtkTreeModel *model;
|
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
gchar *fullname = gnc_account_get_full_name (account);
|
gchar *fullname = gnc_account_get_full_name (account);
|
||||||
gint splits = xaccAccountCountSplits (account, TRUE);
|
gint splits = xaccAccountCountSplits (account, TRUE);
|
||||||
@ -166,8 +165,6 @@ fill_model (FindAccountDialog *facc_dialog, Account *account)
|
|||||||
|
|
||||||
PINFO("Add to Store: Account '%s'", fullname);
|
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_append (GTK_LIST_STORE(model), &iter);
|
||||||
|
|
||||||
gtk_list_store_set (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;
|
GList *ptr;
|
||||||
gchar *filter_text;
|
gchar *filter_text;
|
||||||
gboolean radio_root;
|
gboolean radio_root;
|
||||||
|
GtkTreeModel *model;
|
||||||
|
|
||||||
/* Get the state of the root radio button */
|
/* Get the state of the root radio button */
|
||||||
radio_root = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(facc_dialog->radio_root));
|
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);
|
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 */
|
/* Go through list of accounts */
|
||||||
for (ptr = accts; ptr; ptr = g_list_next (ptr))
|
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);
|
gchar *match_string = g_ascii_strdown (full_name, -1);
|
||||||
|
|
||||||
if ((g_strcmp0 (filter_text, "") == 0) || (g_strrstr (match_string, filter_text) != NULL))
|
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 (match_string);
|
||||||
g_free (full_name);
|
g_free (full_name);
|
||||||
@ -217,17 +223,16 @@ get_account_info (FindAccountDialog *facc_dialog)
|
|||||||
g_free (filter_text);
|
g_free (filter_text);
|
||||||
g_list_free (accts);
|
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));
|
gtk_tree_view_columns_autosize (GTK_TREE_VIEW(facc_dialog->view));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
filter_button_cb (GtkButton *button, FindAccountDialog *facc_dialog)
|
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);
|
get_account_info (facc_dialog);
|
||||||
|
|
||||||
// Clear the filter
|
// Clear the filter
|
||||||
|
Loading…
Reference in New Issue
Block a user