[Bf-blender-cvs] [8f1df9f] asset-experiments: Fix wrong update when switching 'flat' state, also fix remaining memleak.

Bastien Montagne noreply at git.blender.org
Tue Dec 9 17:48:17 CET 2014


Commit: 8f1df9fbbaf423efbedece2f7eadd9ef355bd594
Author: Bastien Montagne
Date:   Tue Dec 9 17:21:31 2014 +0100
Branches: asset-experiments
https://developer.blender.org/rB8f1df9fbbaf423efbedece2f7eadd9ef355bd594

Fix wrong update when switching 'flat' state, also fix remaining memleak.

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

M	source/blender/editors/space_file/filelist.c
M	source/blender/editors/space_file/space_file.c

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

diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index a6f7876..6143c29 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -716,11 +716,9 @@ void filelist_setdir(struct FileList *filelist, const char *dir)
 
 void filelist_setrecursive(struct FileList *filelist, const bool use_recursion)
 {
-	const bool do_free = (filelist->use_recursion != use_recursion);
+	if (filelist->use_recursion != use_recursion) {
+		filelist->use_recursion = use_recursion;
 
-	filelist->use_recursion = use_recursion;
-
-	if (do_free) {
 		filelist_freelib(filelist);
 		filelist_free(filelist);
 	}
@@ -1174,16 +1172,15 @@ static void filelist_read_dir(struct FileList *filelist)
 	filelist->numfiles = BLI_dir_contents(filelist->dir, &(filelist->filelist));
 
 	if (filelist->use_recursion && filelist->recursion_level < FILELIST_MAX_RECURSION) {
+		FileList *fl = filelist_new(FILE_UNIX);
 		file = filelist->filelist;
 		for (i = 0; i < filelist->numfiles; i++, file++) {
-			FileList *fl;
 			char dir[FILE_MAX];
 
 			if (FILENAME_IS_BREADCRUMBS(file->relname) || (file->type & S_IFDIR) == 0) {
 				continue;
 			}
 
-			fl = filelist_new(FILE_UNIX);
 			fl->use_recursion = true;
 			fl->recursion_level = filelist->recursion_level + 1;
 
@@ -1196,6 +1193,7 @@ static void filelist_read_dir(struct FileList *filelist)
 
 			filelist_free(fl);
 		}
+		MEM_freeN(fl);
 	}
 
 	if (new_filelist) {
@@ -1240,6 +1238,7 @@ static void filelist_read_library(struct FileList *filelist)
 	filelist_from_library(filelist, true, false);
 
 	if (!filelist->libfiledata) {
+		FileList *fl = filelist_new(FILE_LOADLIB);
 		BLI_make_exist(filelist->dir);
 		filelist_read_dir(filelist);
 		file = filelist->filelist;
@@ -1255,11 +1254,9 @@ static void filelist_read_library(struct FileList *filelist)
 					file->type |= S_IFDIR;
 
 					if (filelist->use_recursion) {
-						FileList *fl;
 						char dir[FILE_MAX];
 
 						/* Note we do not consider recursion level here, it has no importance in .blend files anyway. */
-						fl = filelist_new(FILE_LOADLIB);
 						fl->use_recursion = true;
 
 						BLI_join_dirfile(dir, sizeof(dir), filelist->dir, file->relname);
@@ -1275,8 +1272,10 @@ static void filelist_read_library(struct FileList *filelist)
 				}
 			}
 		}
+		MEM_freeN(fl);
 	}
 	else if (filelist->use_recursion) {
+		FileList *fl = filelist_new(FILE_LOADLIB);
 		char dir[FILE_MAX], *group;
 
 		const bool is_lib = filelist_islibrary(filelist, dir, &group);
@@ -1290,7 +1289,6 @@ static void filelist_read_library(struct FileList *filelist)
 
 		file = filelist->filelist;
 		for (i = 0; i < filelist->numfiles; i++, file++) {
-			FileList *fl;
 			char dir[FILE_MAX];
 
 			if (FILENAME_IS_BREADCRUMBS(file->relname)) {
@@ -1299,7 +1297,6 @@ static void filelist_read_library(struct FileList *filelist)
 
 			/* Note we do not consider recursion level here, it has no importance in .blend files anyway. */
 			/* And no need to set recursion flag here either. */
-			fl = filelist_new(FILE_LOADLIB);
 
 			BLI_join_dirfile(dir, sizeof(dir), filelist->dir, file->relname);
 			filelist_setdir(fl, dir);
@@ -1311,6 +1308,7 @@ static void filelist_read_library(struct FileList *filelist)
 			filelist_freelib(fl);
 			filelist_free(fl);
 		}
+		MEM_freeN(fl);
 	}
 
 	if (new_filelist) {
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c
index d315b95..4fa5b83 100644
--- a/source/blender/editors/space_file/space_file.c
+++ b/source/blender/editors/space_file/space_file.c
@@ -200,12 +200,12 @@ static void file_refresh(const bContext *C, ScrArea *UNUSED(sa))
 		filelist_setdir(sfile->files, params->dir);
 		params->active_file = -1; // added this so it opens nicer (ton)
 	}
+	filelist_setrecursive(sfile->files, (params->flag & FILE_SHOWFLAT) != 0);
 	filelist_setfilter_options(sfile->files, params->flag & FILE_HIDE_DOT,
 	                                         params->flag & FILE_FILTER ? params->filter : 0,
 	                                         params->filter_id,
 	                                         params->filter_glob,
 	                                         params->filter_search);
-	filelist_setrecursive(sfile->files, (params->flag & FILE_SHOWFLAT) != 0);
 
 	if (filelist_empty(sfile->files)) {
 		thumbnails_stop(wm, sfile->files);




More information about the Bf-blender-cvs mailing list