Mercurial > geeqie.yaz
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; |