changeset 805:5a3fc27147ab

improved vficon_populate
author nadvornik
date Sun, 08 Jun 2008 21:21:13 +0000
parents e702eaa6d1df
children 8620e6934cfb
files src/view_file_icon.c
diffstat 1 files changed, 50 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/view_file_icon.c	Sun Jun 08 20:24:46 2008 +0000
+++ b/src/view_file_icon.c	Sun Jun 08 21:21:13 2008 +0000
@@ -1497,9 +1497,11 @@
 {
 	GtkTreeModel *store;
 	GtkTreePath *tpath;
-	gint row;
 	GList *work;
 	IconData *visible_id = NULL;
+	gint r, c;
+	gint valid;
+	GtkTreeIter iter;
 
 	vficon_verify_selections(vf);
 
@@ -1518,12 +1520,13 @@
 		if (list) visible_id = list->data;
 		}
 
-	vficon_clear_store(vf);
 
 	if (resize)
 		{
 		gint i;
 		gint thumb_width;
+		
+		vficon_clear_store(vf);
 
 		thumb_width = vficon_get_icon_width(vf);
 
@@ -1551,29 +1554,62 @@
 		if (GTK_WIDGET_REALIZED(vf->listview)) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(vf->listview));
 		}
 
-	row = -1;
+	r = -1;
+	c = 0;
+
+	valid = gtk_tree_model_iter_children(store, &iter, NULL);
+
 	work = vf->list;
 	while (work)
 		{
 		GList *list;
-		GtkTreeIter iter;
-
-		row++;
-
-		list = vficon_add_row(vf, &iter);
-		while (work && list)
+		r++;
+		c = 0;
+		if (valid)
+			{
+			gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1);
+			gtk_list_store_set(GTK_LIST_STORE(store), &iter, FILE_COLUMN_POINTER, list, -1);
+			}
+		else
+			{
+			list = vficon_add_row(vf, &iter);
+			}
+
+		while (list)
 			{
 			IconData *id;
 
-			id = work->data;
-			id->row = row;
-
-			list->data = work->data;
+			if (work)
+				{
+				id = work->data;
+				work = work->next;
+				c++;
+
+				id->row = r;
+				}
+			else
+				{
+				id = NULL;
+				}
+
+			list->data = id;
 			list = list->next;
-			work = work->next;
 			}
+		if (valid) valid = gtk_tree_model_iter_next(store, &iter);
 		}
 
+	r++;
+	while (valid)
+		{
+		GList *list;
+
+		gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &list, -1);
+		valid = gtk_list_store_remove(GTK_LIST_STORE(store), &iter);
+		g_list_free(list);
+		}
+
+	VFICON_INFO(vf, rows) = r;
+
 	if (visible_id &&
 	    gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(vf->listview), 0, 0, &tpath, NULL, NULL, NULL))
 		{
@@ -1591,7 +1627,6 @@
 			}
 		}
 
-	VFICON_INFO(vf, rows) = row + 1;
 
 	vf_send_update(vf);
 	vficon_thumb_update(vf);