comparison src/view_file_list.c @ 801:9b676bb76a2e

various refresh and notification fixes
author nadvornik
date Sat, 07 Jun 2008 22:44:17 +0000
parents a25b228978a0
children 3cfc54c77b30
comparison
equal deleted inserted replaced
800:a25b228978a0 801:9b676bb76a2e
140 work = work->next; 140 work = work->next;
141 } 141 }
142 return i; 142 return i;
143 } 143 }
144 144
145 static gboolean vflist_store_clear_cb(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
146 {
147 FileData *fd;
148 gtk_tree_model_get(model, iter, FILE_COLUMN_POINTER, &fd, -1);
149 file_data_unref(fd);
150 return FALSE;
151 }
152
153 static void vflist_store_clear(ViewFile *vf)
154 {
155 GtkTreeModel *store;
156 store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
157 gtk_tree_model_foreach(store, vflist_store_clear_cb, NULL);
158 gtk_tree_store_clear(GTK_TREE_STORE(store));
159 }
145 160
146 void vflist_color_set(ViewFile *vf, FileData *fd, gint color_set) 161 void vflist_color_set(ViewFile *vf, FileData *fd, gint color_set)
147 { 162 {
148 GtkTreeModel *store; 163 GtkTreeModel *store;
149 GtkTreeIter iter; 164 GtkTreeIter iter;
791 else 806 else
792 { 807 {
793 gtk_tree_store_append(store, &new, parent_iter); 808 gtk_tree_store_append(store, &new, parent_iter);
794 } 809 }
795 810
796 vflist_setup_iter(vf, store, &new, fd); 811 vflist_setup_iter(vf, store, &new, file_data_ref(fd));
797 vflist_setup_iter_recursive(vf, store, &new, fd->sidecar_files, selected); 812 vflist_setup_iter_recursive(vf, store, &new, fd->sidecar_files, selected);
798 813
799 if (g_list_find(selected, fd)) 814 if (g_list_find(selected, fd))
800 { 815 {
801 /* renamed files - the same fd appears at different position - select it again*/ 816 /* renamed files - the same fd appears at different position - select it again*/
806 821
807 done = TRUE; 822 done = TRUE;
808 } 823 }
809 else if (match > 0) 824 else if (match > 0)
810 { 825 {
826 file_data_unref(old_fd);
811 valid = gtk_tree_store_remove(store, &iter); 827 valid = gtk_tree_store_remove(store, &iter);
812 } 828 }
813 else 829 else
814 { 830 {
815 if (fd->version != old_version) 831 if (fd->version != old_version)
826 work = work->next; 842 work = work->next;
827 } 843 }
828 844
829 while (valid) 845 while (valid)
830 { 846 {
847 FileData *old_fd;
848 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, FILE_COLUMN_POINTER, &old_fd, -1);
849 file_data_unref(old_fd);
850
831 valid = gtk_tree_store_remove(store, &iter); 851 valid = gtk_tree_store_remove(store, &iter);
832 } 852 }
833 } 853 }
834 854
835 void vflist_sort_set(ViewFile *vf, SortType type, gint ascend) 855 void vflist_sort_set(ViewFile *vf, SortType type, gint ascend)
1512 1532
1513 vflist_thumb_stop(vf); 1533 vflist_thumb_stop(vf);
1514 1534
1515 if (!vf->list) 1535 if (!vf->list)
1516 { 1536 {
1517 gtk_tree_store_clear(store); 1537 vflist_store_clear(vf);
1518 vf_send_update(vf); 1538 vf_send_update(vf);
1519 return; 1539 return;
1520 } 1540 }
1521 1541
1522 if (GTK_WIDGET_REALIZED(vf->listview) && 1542 if (GTK_WIDGET_REALIZED(vf->listview) &&
1746 *----------------------------------------------------------------------------- 1766 *-----------------------------------------------------------------------------
1747 */ 1767 */
1748 1768
1749 gint vflist_set_fd(ViewFile *vf, FileData *dir_fd) 1769 gint vflist_set_fd(ViewFile *vf, FileData *dir_fd)
1750 { 1770 {
1751 GtkTreeStore *store;
1752
1753 if (!dir_fd) return FALSE; 1771 if (!dir_fd) return FALSE;
1754 if (vf->dir_fd == dir_fd) return TRUE; 1772 if (vf->dir_fd == dir_fd) return TRUE;
1755 1773
1756 file_data_unref(vf->dir_fd); 1774 file_data_unref(vf->dir_fd);
1757 vf->dir_fd = file_data_ref(dir_fd); 1775 vf->dir_fd = file_data_ref(dir_fd);
1758 1776
1759 /* force complete reload */ 1777 /* force complete reload */
1760 store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview))); 1778 vflist_store_clear(vf);
1761 gtk_tree_store_clear(store);
1762 1779
1763 filelist_free(vf->list); 1780 filelist_free(vf->list);
1764 vf->list = NULL; 1781 vf->list = NULL;
1765 1782
1766 return vf_refresh(vf); 1783 return vf_refresh(vf);