[evolution-data-server] Bug #605432 - Renaming source allows entering same name



commit f9c8e0f93df1918844ac04b264351133f29985ee
Author: Milan Crha <mcrha redhat com>
Date:   Thu Jan 7 19:58:50 2010 +0100

    Bug #605432 - Renaming source allows entering same name

 libedataserverui/e-source-selector.c |   40 +++++++++++++++++++++++++++++++++-
 1 files changed, 39 insertions(+), 1 deletions(-)
---
diff --git a/libedataserverui/e-source-selector.c b/libedataserverui/e-source-selector.c
index e7789fd..f19b34b 100644
--- a/libedataserverui/e-source-selector.c
+++ b/libedataserverui/e-source-selector.c
@@ -432,6 +432,44 @@ rebuild_model (ESourceSelector *selector)
 	free_rebuild_data (rebuild_data);
 }
 
+static gboolean
+same_source_name_exists (ESourceSelector *selector, const gchar *name)
+{
+	GtkTreeModel *model;
+	GtkTreeIter parent_iter, source_iter;
+
+	g_return_val_if_fail (selector != NULL, FALSE);
+	g_return_val_if_fail (E_IS_SOURCE_SELECTOR (selector), FALSE);
+	g_return_val_if_fail (name != NULL, FALSE);
+
+	model = GTK_TREE_MODEL (selector->priv->tree_store);
+
+	if (gtk_tree_model_get_iter_first (model, &parent_iter)) {
+		do {
+			if (gtk_tree_model_iter_children (model, &source_iter, &parent_iter)) {
+				do {
+					gpointer data;
+					const gchar *source_name;
+
+					gtk_tree_model_get (model, &source_iter, 0, &data, -1);
+					g_assert (E_IS_SOURCE (data));
+
+					source_name = e_source_peek_name (E_SOURCE (data));
+					if (source_name && g_str_equal (name, source_name)) {
+						g_object_unref (data);
+
+						return TRUE;
+					}
+
+					g_object_unref (data);
+				} while (gtk_tree_model_iter_next (model, &source_iter));
+			}
+		} while (gtk_tree_model_iter_next (model, &parent_iter));
+	}
+
+	return FALSE;
+}
+
 static gint
 on_idle_rebuild_model_callback (ESourceSelector *selector)
 {
@@ -627,7 +665,7 @@ text_cell_edited_cb (ESourceSelector *selector,
 
 	g_return_if_fail (E_IS_SOURCE (source));
 
-	if (new_name != NULL && *new_name != '\0')
+	if (new_name != NULL && *new_name != '\0' && !same_source_name_exists (selector, new_name))
 		e_source_set_name (source, new_name);
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]