From a24add6fd00c96045f0c7cfcead0d26ba5a789ee Mon Sep 17 00:00:00 2001 From: David Hampton Date: Sun, 21 Sep 2003 21:43:18 +0000 Subject: [PATCH] Check that a new account belongs to the account tree being displayed by this widget. It may belong in the scheduled transaction account tree. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/branches/gnucash-gnome2-dev@9394 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/gnome-utils/gnc-tree-model-account.c | 35 +++++++++++++++--------- src/gnome-utils/gnc-tree-model-account.h | 5 +++- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/gnome-utils/gnc-tree-model-account.c b/src/gnome-utils/gnc-tree-model-account.c index 08164649ec..db2e9f9b0f 100644 --- a/src/gnome-utils/gnc-tree-model-account.c +++ b/src/gnome-utils/gnc-tree-model-account.c @@ -1087,7 +1087,8 @@ account_row_inserted (Account *account, ENTER("account %p (%s), model %p", account, xaccAccountGetName(account), data); - gnc_tree_model_account_get_iter_from_account (GNC_TREE_MODEL_ACCOUNT (data), account, &iter); + if (!gnc_tree_model_account_get_iter_from_account (GNC_TREE_MODEL_ACCOUNT (data), account, &iter)) + return NULL; path = gtk_tree_model_get_path (GTK_TREE_MODEL (data), &iter); @@ -1221,18 +1222,22 @@ gnc_tree_model_account_get_account (GncTreeModelAccount *model, * routine should only be called from the file * gnc-tree-view-account.c. */ -void +gboolean gnc_tree_model_account_get_iter_from_account (GncTreeModelAccount *model, Account *account, GtkTreeIter *iter) { AccountGroup *group; + gboolean found = FALSE; gint i; ENTER("model %p, account %p, iter %p", model, account, iter); - g_return_if_fail (GNC_IS_TREE_MODEL_ACCOUNT (model)); - g_return_if_fail (account != NULL); - g_return_if_fail (iter != NULL); + g_return_val_if_fail (GNC_IS_TREE_MODEL_ACCOUNT (model), FALSE); + g_return_val_if_fail ((account != NULL), FALSE); + g_return_val_if_fail ((iter != NULL), FALSE); + + if (model->priv->root != xaccAccountGetRoot (account)) + return FALSE; iter->user_data = account; iter->stamp = model->stamp; @@ -1240,13 +1245,13 @@ gnc_tree_model_account_get_iter_from_account (GncTreeModelAccount *model, if (account == model->priv->toplevel) { iter->user_data2 = NULL; iter->user_data3 = GINT_TO_POINTER (0); - return; + return TRUE; } group = xaccAccountGetParent (account); - for (i = 0; i < xaccGroupGetNumAccounts (group); i++) { if (xaccGroupGetAccount (group, i) == account) { + found = TRUE; break; } } @@ -1254,6 +1259,7 @@ gnc_tree_model_account_get_iter_from_account (GncTreeModelAccount *model, iter->user_data2 = group; iter->user_data3 = GINT_TO_POINTER (i); LEAVE("iter %s", iter_to_string(iter)); + return found; } /* @@ -1272,7 +1278,9 @@ gnc_tree_model_account_get_path_from_account (GncTreeModelAccount *model, g_return_val_if_fail (GNC_IS_TREE_MODEL_ACCOUNT (model), NULL); g_return_val_if_fail (account != NULL, NULL); - gnc_tree_model_account_get_iter_from_account (model, account, &tree_iter); + if (!gnc_tree_model_account_get_iter_from_account (model, account, &tree_iter)) + return NULL; + tree_path = gtk_tree_model_get_path (GTK_TREE_MODEL(model), &tree_iter); if (tree_path) { gchar *path_string = gtk_tree_path_to_string(tree_path); @@ -1415,11 +1423,12 @@ void gnc_tree_model_account_event_handler (GUID *entity, QofIdType type, case GNC_EVENT_ADD: /* Tell the filters/views where the new account was added. */ DEBUG("create account %p (%s)", account, account_name); - gnc_tree_model_account_get_iter_from_account (model, account, &iter); - path = gtk_tree_model_get_path (GTK_TREE_MODEL(model), &iter); - gtk_tree_model_row_inserted (GTK_TREE_MODEL(model), path, &iter); - gnc_tree_model_account_path_changed (model, path); - gtk_tree_path_free(path); + if (gnc_tree_model_account_get_iter_from_account (model, account, &iter)) { + path = gtk_tree_model_get_path (GTK_TREE_MODEL(model), &iter); + gtk_tree_model_row_inserted (GTK_TREE_MODEL(model), path, &iter); + gnc_tree_model_account_path_changed (model, path); + gtk_tree_path_free(path); + } break; case GNC_EVENT_REMOVE: diff --git a/src/gnome-utils/gnc-tree-model-account.h b/src/gnome-utils/gnc-tree-model-account.h index 8ba6feb618..701c08c700 100644 --- a/src/gnome-utils/gnc-tree-model-account.h +++ b/src/gnome-utils/gnc-tree-model-account.h @@ -162,8 +162,11 @@ Account *gnc_tree_model_account_get_account (GncTreeModelAccount * * @param iter A pointer to an iter. This iter will be rewritten to * contain the results of the query. + * + * @return TRUE if the account was found and the iter filled + * in. FALSE otherwise. */ -void gnc_tree_model_account_get_iter_from_account (GncTreeModelAccount *model, +gboolean gnc_tree_model_account_get_iter_from_account (GncTreeModelAccount *model, Account *account, GtkTreeIter *iter);