diff src/filedata.c @ 2915:8536c3a680ea

Fix #664: Recursive slideshow does not respect file sorting https://github.com/BestImageViewer/geeqie/issues/664
author Colin Clark <colin.clark@cclark.uk>
date Mon, 08 Apr 2019 11:32:12 +0100
parents e6f95baec8b5
children
line wrap: on
line diff
--- a/src/filedata.c	Mon Apr 01 11:56:36 2019 +0100
+++ b/src/filedata.c	Mon Apr 08 11:32:12 2019 +0100
@@ -1633,6 +1633,33 @@
 		}
 }
 
+static void filelist_recursive_append_full(GList **list, GList *dirs, SortType method, gboolean ascend)
+{
+	GList *work;
+
+	work = dirs;
+	while (work)
+		{
+		FileData *fd = (FileData *)(work->data);
+		GList *f;
+		GList *d;
+
+		if (filelist_read(fd, &f, &d))
+			{
+			f = filelist_filter(f, FALSE);
+			f = filelist_sort_full(f, method, ascend, (GCompareFunc) filelist_sort_file_cb);
+			*list = g_list_concat(*list, f);
+
+			d = filelist_filter(d, TRUE);
+			d = filelist_sort_path(d);
+			filelist_recursive_append_full(list, d, method, ascend);
+			filelist_free(d);
+			}
+
+		work = work->next;
+		}
+}
+
 GList *filelist_recursive(FileData *dir_fd)
 {
 	GList *list;
@@ -1650,6 +1677,23 @@
 	return list;
 }
 
+GList *filelist_recursive_full(FileData *dir_fd, SortType method, gboolean ascend)
+{
+	GList *list;
+	GList *d;
+
+	if (!filelist_read(dir_fd, &list, &d)) return NULL;
+	list = filelist_filter(list, FALSE);
+	list = filelist_sort_full(list, method, ascend, (GCompareFunc) filelist_sort_file_cb);
+
+	d = filelist_filter(d, TRUE);
+	d = filelist_sort_path(d);
+	filelist_recursive_append_full(&list, d, method, ascend);
+	filelist_free(d);
+
+	return list;
+}
+
 /*
  *-----------------------------------------------------------------------------
  * file modification support