do not add duplicate keywords from config file
authorVladimir Nadvornik <nadvornik@suse.cz>
Fri, 20 Mar 2009 11:52:29 +0000 (11:52 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Fri, 20 Mar 2009 11:52:29 +0000 (11:52 +0000)
src/bar_keywords.c
src/metadata.c
src/metadata.h

index d2a8ee2..b05f8e1 100644 (file)
@@ -535,7 +535,7 @@ static gboolean bar_pane_keywords_dnd_can_move(GtkTreeModel *keyword_tree, GtkTr
                }
 
        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 @@ static gboolean bar_pane_keywords_dnd_skip_existing(GtkTreeModel *keyword_tree,
        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 @@ static void bar_pane_keywords_edit_ok_cb(GenericDialog *gd, gpointer data)
        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 @@ static void bar_pane_keywords_edit_ok_cb(GenericDialog *gd, gpointer data)
                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;
index 07eb512..180a44a 100644 (file)
@@ -784,7 +784,7 @@ gboolean keyword_same_parent(GtkTreeModel *keyword_tree, GtkTreeIter *a, GtkTree
                }
 }
 
-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 @@ gboolean keyword_exists(GtkTreeModel *keyword_tree, GtkTreeIter *parent_ptr, Gtk
                        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 @@ GtkTreeIter *keyword_add_from_config(GtkTreeStore *keyword_tree, GtkTreeIter *pa
        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);
index 49e78cf..46ccc0b 100644 (file)
@@ -61,7 +61,7 @@ gboolean keyword_get_is_keyword(GtkTreeModel *keyword_tree, GtkTreeIter *iter);
 
 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);