}
}
-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;
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);
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);