[PATCH 21/22] Fix issue with odd message lists. Validate them (cherry picked from commit a94f43582faef69317469c34dac8d0fc5985a5f6)

[email protected] Mon, 28 Dec 2009 13:32:53 +0800
Newsgroups gmane.comp.gnome.evolution.patches
Message-ID <0666336267e5a150542c161dc68e9d588ba3ece0.1261976200.git.yanli@infradead.org>
From: Srinivasa Ragavan <[email protected]>


Signed-off-by: Yan Li <[email protected]>
---
 src/em-tree-store.c |   21 ++++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/src/em-tree-store.c b/src/em-tree-store.c
index 6e60f8c..e2f5b64 100644
--- a/src/em-tree-store.c
+++ b/src/em-tree-store.c
@@ -218,6 +218,22 @@ emts_calc_path(EMTreeNode *node, GtkTreePath *path)
 	}
 }
 
+static gboolean
+validate_path (EMTreeNode *node)
+{
+	EMTreeNode *save = node, *next;
+	gboolean valid = TRUE;
+	next = node->parent;
+
+	while (valid && next) {
+		if (next == save)
+			valid = FALSE;
+		next = next->parent;
+	}
+
+	return valid;
+}
+
 static GtkTreePath *
 emts_get_path(GtkTreeModel *tree_model, GtkTreeIter  *iter)
 {
@@ -228,7 +244,10 @@ emts_get_path(GtkTreeModel *tree_model, GtkTreeIter  *iter)
 	g_return_val_if_fail (iter->stamp == EMTS (tree_model)->stamp, NULL);
 
 	path = gtk_tree_path_new();
-	emts_calc_path((EMTreeNode *)iter->user_data, path);
+	if (validate_path ((EMTreeNode *)iter->user_data))
+		emts_calc_path((EMTreeNode *)iter->user_data, path);
+	else
+		gtk_tree_path_append_index(path, 0);
 
 	return path;
 }
-- 
1.6.5.7