changeset 39:64068b1bab89

Thu Apr 14 10:44:00 2005 John Ellis <johne@verizon.net> * cache.c (cache_sim_data_load): Fix to return CacheData if any data type exists. * pan-view.c: Fix slow merging of embedded dates into file list; includes optimizing pan_cache_sync_date and plugging a memory leak. ##### Note: GQview CVS on sourceforge is not always up to date, please use ##### ##### an offical release when making enhancements and translation updates. #####
author gqview
date Thu, 14 Apr 2005 14:56:17 +0000
parents d5f8f8a4d47b
children dcc04a6a58bf
files ChangeLog TODO src/cache.c src/pan-view.c
diffstat 4 files changed, 28 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Apr 14 08:54:29 2005 +0000
+++ b/ChangeLog	Thu Apr 14 14:56:17 2005 +0000
@@ -1,3 +1,10 @@
+Thu Apr 14 10:44:00 2005  John Ellis  <johne@verizon.net>
+
+	* cache.c (cache_sim_data_load): Fix to return CacheData if any data
+	type exists.
+	* pan-view.c: Fix slow merging of embedded dates into file list;
+	includes optimizing pan_cache_sync_date and plugging a memory leak.
+
 Thu Apr 14 04:49:57 2005  John Ellis  <johne@verizon.net>
 
 	* pixbuf-renderer.c (pixbuf_renderer_move): Clear the correct draw
--- a/TODO	Thu Apr 14 08:54:29 2005 +0000
+++ b/TODO	Thu Apr 14 14:56:17 2005 +0000
@@ -31,9 +31,8 @@
      > introduced bug (looks like clamp or rounding error)
   d> optimize pixbuf_draw_triangle
      > introduced bug (round error?)
-   > does new pixbuf_draw_triangle contain line edge rounding error?
    > check ref counting of image when redrawing after finish loading
-   > speed up sorting image.. stage when sorting/merging cache list
+  d> speed up sorting image.. stage when sorting/merging cache list
 
 
    > time line view:
--- a/src/cache.c	Thu Apr 14 08:54:29 2005 +0000
+++ b/src/cache.c	Thu Apr 14 14:56:17 2005 +0000
@@ -476,7 +476,11 @@
 
 	fclose(f);
 
-	if (!cd->dimensions && !cd->similarity)
+	if (!cd->dimensions &&
+	    !cd->have_date &&
+	    !cd->have_checksum &&
+	    !cd->have_md5sum &&
+	    !cd->similarity)
 		{
 		cache_sim_data_free(cd);
 		cd = NULL;
--- a/src/pan-view.c	Thu Apr 14 08:54:29 2005 +0000
+++ b/src/pan-view.c	Thu Apr 14 14:56:17 2005 +0000
@@ -546,6 +546,7 @@
 	return (pw->cache_cl == NULL);
 }
 
+/* This sync date function is optimized for lists with a common sort */
 static void pan_cache_sync_date(PanWindow *pw, GList *list)
 {
 	GList *haystack;
@@ -572,16 +573,13 @@
 			path = ((FileData *)pc)->path;
 			if (path && strcmp(path, fd->path) == 0)
 				{
-				GList *tmp;
-
 				if (pc->cd && pc->cd->have_date && pc->cd->date >= 0)
 					{
 					fd->date = pc->cd->date;
 					}
 
-				tmp = needle;
-				needle = needle->next;
-				haystack = g_list_delete_link(haystack, tmp);
+				haystack = g_list_delete_link(haystack, needle);
+				needle = NULL;
 				}
 			else
 				{
@@ -589,6 +587,8 @@
 				}
 			}
 		}
+
+	g_list_free(haystack);
 }
 
 /*
@@ -1911,17 +1911,18 @@
 	gint end_year = 0;
 	gint end_month = 0;
 
-	pw->cache_list = filelist_sort(pw->cache_list, SORT_TIME, TRUE);
-
 	list = pan_window_layout_list(path, SORT_NONE, TRUE);
-	list = filelist_sort(list, SORT_TIME, TRUE);
 
 	if (pw->cache_list && SORT_BY_EXIF_DATE)
 		{
+		pw->cache_list = filelist_sort(pw->cache_list, SORT_NAME, TRUE);
+		list = filelist_sort(list, SORT_NAME, TRUE);
 		pan_cache_sync_date(pw, list);
-		list = filelist_sort(list, SORT_TIME, TRUE);
 		}
 
+	pw->cache_list = filelist_sort(pw->cache_list, SORT_TIME, TRUE);
+	list = filelist_sort(list, SORT_TIME, TRUE);
+
 	day_max = 0;
 	count = 0;
 	tc = 0;
@@ -2132,17 +2133,18 @@
 	gint x_width;
 	gint y_height;
 
-	pw->cache_list = filelist_sort(pw->cache_list, SORT_TIME, TRUE);
-
 	list = pan_window_layout_list(path, SORT_NONE, TRUE);
-	list = filelist_sort(list, SORT_TIME, TRUE);
 
 	if (pw->cache_list && SORT_BY_EXIF_DATE)
 		{
+		pw->cache_list = filelist_sort(pw->cache_list, SORT_NAME, TRUE);
+		list = filelist_sort(list, SORT_NAME, TRUE);
 		pan_cache_sync_date(pw, list);
-		list = filelist_sort(list, SORT_TIME, TRUE);
 		}
 
+	pw->cache_list = filelist_sort(pw->cache_list, SORT_TIME, TRUE);
+	list = filelist_sort(list, SORT_TIME, TRUE);
+
 	*width = PAN_FOLDER_BOX_BORDER * 2;
 	*height = PAN_FOLDER_BOX_BORDER * 2;