[evolution] Bug #604306 - Crash in folder_tree_cell_edited_cb
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug #604306 - Crash in folder_tree_cell_edited_cb
- Date: Tue, 16 Feb 2010 15:12:15 +0000 (UTC)
commit cca50eb8002e6ac01a537f403230fe4a99600461
Author: Milan Crha <mcrha redhat com>
Date: Tue Feb 16 16:11:47 2010 +0100
Bug #604306 - Crash in folder_tree_cell_edited_cb
mail/em-folder-tree.c | 28 ++++++++++++++++++++--------
1 files changed, 20 insertions(+), 8 deletions(-)
---
diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c
index 84ac0fc..567f3de 100644
--- a/mail/em-folder-tree.c
+++ b/mail/em-folder-tree.c
@@ -207,7 +207,7 @@ folder_tree_get_folder_info__done (struct _EMFolderTreeGetFolderInfo *m)
GtkTreeView *tree_view;
GtkTreeModel *model;
GtkTreePath *path;
- gboolean is_store;
+ gboolean is_store, need_add_node;
/* check that we haven't been destroyed */
g_return_if_fail (GTK_IS_TREE_VIEW (m->folder_tree));
@@ -247,6 +247,8 @@ folder_tree_get_folder_info__done (struct _EMFolderTreeGetFolderInfo *m)
/* get the first child (which will be a dummy node) */
gtk_tree_model_iter_children (model, &iter, &root);
+ need_add_node = TRUE;
+
/* Traverse to the last valid iter, or the "Loading..." node */
do {
gboolean is_store_node = FALSE, is_folder_node = FALSE;
@@ -256,8 +258,11 @@ folder_tree_get_folder_info__done (struct _EMFolderTreeGetFolderInfo *m)
gtk_tree_model_get (model, &iter, COL_BOOL_IS_STORE, &is_store_node, COL_BOOL_IS_FOLDER, &is_folder_node, -1);
/* stop on a "Loading..." node */
- if (!is_store_node && !is_folder_node)
+ if (!is_store_node && !is_folder_node) {
+ /* remember it found a "Loading..." node and overwrite or remove it later */
+ need_add_node = FALSE;
break;
+ }
} while (gtk_tree_model_iter_next (model, &iter));
@@ -274,7 +279,8 @@ folder_tree_get_folder_info__done (struct _EMFolderTreeGetFolderInfo *m)
if (fi == NULL) {
/* no children afterall... remove the "Loading..." placeholder node */
- gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
+ if (!need_add_node)
+ gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
if (is_store) {
path = gtk_tree_model_get_path (model, &root);
@@ -286,16 +292,22 @@ folder_tree_get_folder_info__done (struct _EMFolderTreeGetFolderInfo *m)
gint fully_loaded = (m->flags & CAMEL_STORE_FOLDER_INFO_RECURSIVE) ? TRUE : FALSE;
do {
- gboolean known = g_hash_table_lookup (si->full_hash, fi->full_name) != NULL;
+ if (g_hash_table_lookup (si->full_hash, fi->full_name) == NULL) {
+ if (need_add_node)
+ gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &root);
+ need_add_node = TRUE;
- if (!known)
em_folder_tree_model_set_folder_info (
EM_FOLDER_TREE_MODEL (model),
&iter, si, fi, fully_loaded);
+ }
- if ((fi = fi->next) != NULL && !known)
- gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &root);
+ fi = fi->next;
} while (fi != NULL);
+
+ /* all children are known, remove the "Loading..." node */
+ if (!need_add_node)
+ gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
}
gtk_tree_store_set (
@@ -578,7 +590,7 @@ folder_tree_cell_edited_cb (EMFolderTree *folder_tree,
COL_STRING_DISPLAY_NAME, &old_name,
COL_STRING_FULL_NAME, &old_full_name, -1);
- if (g_strcmp0 (new_name, old_name) == 0)
+ if (!old_name || !old_full_name || g_strcmp0 (new_name, old_name) == 0)
goto exit;
/* Check for invalid characters. */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]