diff src/view_file_list.c @ 763:81f9e8dbb4bf

improved infrastructure for tracing changes, optimized vflist_populate_view
author nadvornik
date Wed, 28 May 2008 22:12:10 +0000
parents e6927cef8541
children 110462fdf31b
line wrap: on
line diff
--- a/src/view_file_list.c	Tue May 27 18:46:34 2008 +0000
+++ b/src/view_file_list.c	Wed May 28 22:12:10 2008 +0000
@@ -34,6 +34,7 @@
 
 enum {
 	FILE_COLUMN_POINTER = 0,
+	FILE_COLUMN_VERSION,
 	FILE_COLUMN_THUMB,
 	FILE_COLUMN_NAME,
 	FILE_COLUMN_SIDECARS,
@@ -717,6 +718,7 @@
 	size = text_from_size(fd->size);
 
 	gtk_tree_store_set(store, iter, FILE_COLUMN_POINTER, fd,
+					FILE_COLUMN_VERSION, fd->version,
 					FILE_COLUMN_THUMB, (VFLIST_INFO(vf, thumbs_enabled)) ? fd->pixbuf : NULL,
 					FILE_COLUMN_NAME, fd->name,
 					FILE_COLUMN_SIDECARS, sidecars,
@@ -1418,6 +1420,8 @@
 			case STM_MODE_TOGGLE: fd->marks[n] = !fd->marks[n];
 				break;
 			}
+		
+		file_data_increment_version(fd);
 
 		gtk_tree_store_set(GTK_TREE_STORE(store), &iter, FILE_COLUMN_MARKS + n, fd->marks[n], -1);
 
@@ -1496,10 +1500,14 @@
 		while (!done)
 			{
 			FileData *old_fd = NULL;
+			gint old_version = 0;
 
 			if (valid)
 				{
-				gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, FILE_COLUMN_POINTER, &old_fd, -1);
+				gtk_tree_model_get(GTK_TREE_MODEL(store), &iter,
+						   FILE_COLUMN_POINTER, &old_fd,
+						   FILE_COLUMN_VERSION, &old_version,
+						   -1);
 
 				if (fd == old_fd)
 					{
@@ -1540,7 +1548,8 @@
 				}
 			else
 				{
-				vflist_setup_iter_with_sidecars(vf, store, &iter, fd);
+				if (old_version != fd->version)
+					vflist_setup_iter_with_sidecars(vf, store, &iter, fd);
 
 				if (valid) valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter);
 
@@ -1701,6 +1710,7 @@
 	gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, FILE_COLUMN_POINTER, &fd, col_idx, &mark, -1);
 	mark = !mark;
 	fd->marks[col_idx - FILE_COLUMN_MARKS] = mark;
+	file_data_increment_version(fd);
 
 	gtk_tree_store_set(store, &iter, col_idx, mark, -1);
 	gtk_tree_path_free(path);
@@ -1783,6 +1793,7 @@
 	VFLIST_INFO(vf, select_idle_id) = -1;
 
 	flist_types[FILE_COLUMN_POINTER] = G_TYPE_POINTER;
+	flist_types[FILE_COLUMN_VERSION] = G_TYPE_INT;
 	flist_types[FILE_COLUMN_THUMB] = GDK_TYPE_PIXBUF;
 	flist_types[FILE_COLUMN_NAME] = G_TYPE_STRING;
 	flist_types[FILE_COLUMN_SIDECARS] = G_TYPE_STRING;