[Bf-blender-cvs] [399ae5d] asset-experiments: Make 'recursion' work as expected.

Bastien Montagne noreply at git.blender.org
Tue Feb 3 21:49:35 CET 2015


Commit: 399ae5d41a8e2fab1ddd3bfe1ab2696be18a6e48
Author: Bastien Montagne
Date:   Tue Feb 3 21:47:51 2015 +0100
Branches: asset-experiments
https://developer.blender.org/rB399ae5d41a8e2fab1ddd3bfe1ab2696be18a6e48

Make 'recursion' work as expected.

Now, recursion  0 = previous behavior,
     recursion  1 = only show content of immediate .blend files, do not recurse in actual dir hierarchy,
     recursion >1 = complete recursion!

===================================================================

M	release/scripts/startup/bl_ui/space_filebrowser.py
M	source/blender/editors/space_file/filelist.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py
index 6b7be86..6e85b1e 100644
--- a/release/scripts/startup/bl_ui/space_filebrowser.py
+++ b/release/scripts/startup/bl_ui/space_filebrowser.py
@@ -57,7 +57,7 @@ class FILEBROWSER_HT_header(Header):
             layout.prop(params, "display_type", expand=True, text="")
             layout.prop(params, "sort_method", expand=True, text="")
 
-            layout.prop(params, "recursion_level", slider=True)
+            layout.prop(params, "recursion_level")
             layout.prop(params, "show_hidden", text="", icon='FILE_HIDDEN')
             layout.prop(params, "use_filter", text="", icon='FILTER')
 
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index ce33c3f..aacb0b4 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -1254,11 +1254,13 @@ static void filelist_setfiletypes(const char *root, struct direntry *files, cons
 			continue;
 		}
 #endif
-		file->flags = file_extension_type(root, file->relname);
 
 		if (filter_glob[0] && BLI_testextensie_glob(file->relname, filter_glob)) {
 			file->flags = FILE_TYPE_OPERATOR;
 		}
+		else {
+			file->flags = file_extension_type(root, file->relname);
+		}
 	}
 }
 
@@ -1367,7 +1369,7 @@ static unsigned int groupname_to_filter_id(const char *group)
 static void filelist_readjob_merge_sublist(
         struct direntry **filelist_buff, int *filelist_buff_size, int *filelist_used_size,
         const char *root, const char *subdir, struct direntry *subfiles, const int num_subfiles,
-        const bool ignore_breadcrumbs)
+        const bool ignore_currpar)
 {
 	if (num_subfiles) {
 		struct direntry *f;
@@ -1387,8 +1389,8 @@ static void filelist_readjob_merge_sublist(
 			*filelist_buff = new_filelist;
 		}
 		for (i = *filelist_used_size, j = 0, f = subfiles; j < num_subfiles; j++, f++) {
-			if (ignore_breadcrumbs && FILENAME_IS_CURRPAR(f->relname)) {
-				/* Ignore 'inner' breadcrumbs! */
+			if (ignore_currpar&& FILENAME_IS_CURRPAR(f->relname)) {
+				/* Ignore 'inner' curr/parent! */
 				new_numfiles--;
 				continue;
 			}
@@ -1664,13 +1666,9 @@ static void filelist_readjob_dir_lib_rec(
 
 	if (do_lib) {
 		filelist_readjob_list_lib(dir, &files, &num_files);
-
-		if (!files) {
-			is_lib = false;
-			num_files = BLI_filelist_dir_contents(dir, &files);
-		}
 	}
-	else {
+	if (!files) {
+		is_lib = false;
 		num_files = BLI_filelist_dir_contents(dir, &files);
 	}
 
@@ -1701,7 +1699,7 @@ static void filelist_readjob_dir_lib_rec(
 	BLI_mutex_lock(lock);
 
 	filelist_readjob_merge_sublist(&filelist->filelist, filelist_buffsize, &filelist->numfiles, filelist->dir,
-	                               dir, files, num_files, recursion_level != 0);
+	                               dir, files, num_files, recursion_level > 1);
 
 	(*done_files)++;
 	*progress = (float)(*done_files) / filelist->numfiles;
@@ -1713,7 +1711,7 @@ static void filelist_readjob_dir_lib_rec(
 	*do_update = true;
 
 	/* in case it's a lib we don't care anymore about max recursion level... */
-	if (!*stop && filelist->max_recursion && ((do_lib && is_lib) || (recursion_level < filelist->max_recursion))) {
+	if (!*stop && filelist->max_recursion && (do_lib || (recursion_level < filelist->max_recursion))) {
 		for (i = 0, file = files; i < num_files && !*stop; i++, file++) {
 			char subdir[FILE_MAX];
 
@@ -1725,6 +1723,12 @@ static void filelist_readjob_dir_lib_rec(
 				(*done_files)++;
 				continue;
 			}
+			else if (!is_lib && (recursion_level >= filelist->max_recursion) &&
+			         !ELEM(file->flags, FILE_TYPE_BLENDER, FILE_TYPE_BLENDER_BACKUP))
+			{
+				/* Do not recurse in real directories in this case, only in .blend libs. */
+				continue;
+			}
 
 			BLI_join_dirfile(subdir, sizeof(subdir), dir, file->relname);
 			BLI_cleanup_dir(main_name, subdir);
@@ -1754,7 +1758,7 @@ static void filelist_readjob_dir(
 
 	BLI_mutex_unlock(lock);
 
-	filelist_readjob_dir_lib_rec(false, main_name, filelist, &filelist_buffsize, dir, filter_glob, 0,
+	filelist_readjob_dir_lib_rec(false, main_name, filelist, &filelist_buffsize, dir, filter_glob, 1,
 	                             stop, do_update, progress, &done_files, lock);
 }
 
@@ -1778,7 +1782,7 @@ static void filelist_readjob_lib(
 
 	BLI_cleanup_dir(main_name, dir);
 
-	filelist_readjob_dir_lib_rec(true, main_name, filelist, &filelist_buffsize, dir, filter_glob, 0,
+	filelist_readjob_dir_lib_rec(true, main_name, filelist, &filelist_buffsize, dir, filter_glob, 1,
 	                             stop, do_update, progress, &done_files, lock);
 }




More information about the Bf-blender-cvs mailing list