diff src/metadata.c @ 1465:400ecfc3d8b1

do not add duplicate keywords from config file
author nadvornik
date Fri, 20 Mar 2009 11:52:29 +0000
parents 1b3751ac4743
children 7cb24fdf07c0
line wrap: on
line diff
--- a/src/metadata.c	Fri Mar 20 10:12:29 2009 +0000
+++ b/src/metadata.c	Fri Mar 20 11:52:29 2009 +0000
@@ -784,7 +784,7 @@
 		}
 }
 
-gboolean keyword_exists(GtkTreeModel *keyword_tree, GtkTreeIter *parent_ptr, GtkTreeIter *sibling, const gchar *name, gboolean exclude_sibling)
+gboolean keyword_exists(GtkTreeModel *keyword_tree, GtkTreeIter *parent_ptr, GtkTreeIter *sibling, const gchar *name, gboolean exclude_sibling, GtkTreeIter *result)
 {
 	GtkTreeIter parent;
 	GtkTreeIter iter;
@@ -818,7 +818,11 @@
 			ret = strcmp(casefold, iter_casefold) == 0;
 			g_free(iter_casefold);
 			}
-		if (ret) break;
+		if (ret) 
+			{
+			if (result) *result = iter;
+			break;
+			}
 		if (!gtk_tree_model_iter_next(keyword_tree, &iter)) break;
 		}
 	g_free(casefold);
@@ -1292,7 +1296,11 @@
 	if (name && name[0]) 
 		{
 		GtkTreeIter iter;
-		gtk_tree_store_append(keyword_tree, &iter, parent);
+		/* re-use existing keyword if any */
+		if (!keyword_exists(GTK_TREE_MODEL(keyword_tree), parent, NULL, name, FALSE, &iter))
+			{
+			gtk_tree_store_append(keyword_tree, &iter, parent);
+			}
 		keyword_set(keyword_tree, &iter, name, is_kw);
 		g_free(name);
 		return gtk_tree_iter_copy(&iter);