comparison src/metadata.c @ 1429:985366bccfb8

do not allow to add keywords with the same name as siblings
author nadvornik
date Fri, 13 Mar 2009 23:19:58 +0000
parents 3019f5d3a3c7
children cf4029d10d38
comparison
equal deleted inserted replaced
1428:3019f5d3a3c7 1429:985366bccfb8
763 gtk_tree_path_free(pa); 763 gtk_tree_path_free(pa);
764 gtk_tree_path_free(pb); 764 gtk_tree_path_free(pb);
765 return ret; 765 return ret;
766 } 766 }
767 767
768 gboolean keyword_same_parent(GtkTreeModel *keyword_tree, GtkTreeIter *a, GtkTreeIter *b)
769 {
770 GtkTreeIter parent_a;
771 GtkTreeIter parent_b;
772
773 gboolean valid_pa = gtk_tree_model_iter_parent(keyword_tree, &parent_a, a);
774 gboolean valid_pb = gtk_tree_model_iter_parent(keyword_tree, &parent_b, b);
775
776 if (valid_pa && valid_pb)
777 {
778 return keyword_compare(keyword_tree, &parent_a, &parent_b) == 0;
779 }
780 else
781 {
782 return (!valid_pa && !valid_pb); /* both are toplevel */
783 }
784 }
785
786 gboolean keyword_exists(GtkTreeModel *keyword_tree, GtkTreeIter *parent_ptr, GtkTreeIter *sibling, const gchar *name, gboolean exclude_sibling)
787 {
788 GtkTreeIter parent;
789 GtkTreeIter iter;
790 gboolean toplevel = FALSE;
791 gboolean ret;
792 gchar *casefold;
793
794 if (parent_ptr)
795 {
796 parent = *parent_ptr;
797 }
798 else if (sibling)
799 {
800 toplevel = !gtk_tree_model_iter_parent(keyword_tree, &parent, sibling);
801 }
802 else
803 {
804 toplevel = TRUE;
805 }
806
807 if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(keyword_tree), &iter, toplevel ? NULL : &parent)) return FALSE;
808
809 casefold = g_utf8_casefold(name, -1);
810 ret = FALSE;
811
812 while (TRUE)
813 {
814 if (!(exclude_sibling && sibling && keyword_compare(keyword_tree, &iter, sibling) == 0))
815 {
816 gchar *iter_casefold = keyword_get_casefold(keyword_tree, &iter);
817 ret = strcmp(casefold, iter_casefold) == 0;
818 g_free(iter_casefold);
819 }
820 if (ret) break;
821 if (!gtk_tree_model_iter_next(keyword_tree, &iter)) break;
822 }
823 g_free(casefold);
824 return ret;
825 }
826
827
768 void keyword_copy(GtkTreeStore *keyword_tree, GtkTreeIter *to, GtkTreeIter *from) 828 void keyword_copy(GtkTreeStore *keyword_tree, GtkTreeIter *to, GtkTreeIter *from)
769 { 829 {
770 830
771 gchar *mark, *name, *casefold; 831 gchar *mark, *name, *casefold;
772 gboolean is_keyword; 832 gboolean is_keyword;