# HG changeset patch # User nadvornik # Date 1237549949 0 # Node ID 400ecfc3d8b1a468c1b17b0ed73f347d61425bed # Parent 1b3751ac4743b4a5008d3d79820b14bab0bb8506 do not add duplicate keywords from config file diff -r 1b3751ac4743 -r 400ecfc3d8b1 src/bar_keywords.c --- a/src/bar_keywords.c Fri Mar 20 10:12:29 2009 +0000 +++ b/src/bar_keywords.c Fri Mar 20 11:52:29 2009 +0000 @@ -535,7 +535,7 @@ } src_name = keyword_get_name(keyword_tree, src_kw_iter); - if (keyword_exists(keyword_tree, NULL, dest_kw_iter, src_name, FALSE)) + if (keyword_exists(keyword_tree, NULL, dest_kw_iter, src_name, FALSE, NULL)) { g_free(src_name); return FALSE; @@ -551,7 +551,7 @@ while (work) { gchar *keyword = work->data; - if (keyword_exists(keyword_tree, NULL, dest_kw_iter, keyword, FALSE)) + if (keyword_exists(keyword_tree, NULL, dest_kw_iter, keyword, FALSE, NULL)) { GList *next = work->next; g_free(keyword); @@ -781,7 +781,7 @@ if (cdd->edit_existing) { if (keywords && keywords->data && /* there should be one keyword */ - !keyword_exists(keyword_tree, NULL, &kw_iter, keywords->data, TRUE)) + !keyword_exists(keyword_tree, NULL, &kw_iter, keywords->data, TRUE, NULL)) { keyword_set(GTK_TREE_STORE(keyword_tree), &kw_iter, keywords->data, cdd->is_keyword); } @@ -793,7 +793,7 @@ while (work) { GtkTreeIter add; - if (keyword_exists(keyword_tree, NULL, have_dest ? &kw_iter : NULL, work->data, FALSE)) + if (keyword_exists(keyword_tree, NULL, have_dest ? &kw_iter : NULL, work->data, FALSE, NULL)) { work = work->next; continue; diff -r 1b3751ac4743 -r 400ecfc3d8b1 src/metadata.c --- 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); diff -r 1b3751ac4743 -r 400ecfc3d8b1 src/metadata.h --- a/src/metadata.h Fri Mar 20 10:12:29 2009 +0000 +++ b/src/metadata.h Fri Mar 20 11:52:29 2009 +0000 @@ -61,7 +61,7 @@ gboolean keyword_compare(GtkTreeModel *keyword_tree, GtkTreeIter *a, GtkTreeIter *b); gboolean keyword_same_parent(GtkTreeModel *keyword_tree, GtkTreeIter *a, GtkTreeIter *b); -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); void keyword_copy(GtkTreeStore *keyword_tree, GtkTreeIter *to, GtkTreeIter *from); void keyword_copy_recursive(GtkTreeStore *keyword_tree, GtkTreeIter *to, GtkTreeIter *from);