[Bf-blender-cvs] [b1ce5e6] asset-experiments: Fix bad behavior in case of 'refresh' while still listing.

Bastien Montagne noreply at git.blender.org
Sat May 9 16:43:10 CEST 2015


Commit: b1ce5e67720a21952fa8de01ca4596069ca6950d
Author: Bastien Montagne
Date:   Sat May 9 16:26:50 2015 +0200
Branches: asset-experiments
https://developer.blender.org/rBb1ce5e67720a21952fa8de01ca4596069ca6950d

Fix bad behavior in case of 'refresh' while still listing.

Mismatch in 'owner' of job, not giving right one to stoping helper, sigh.

Note that this was also affecting any 'interrupting' task (like changing level of flat listing...).

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

M	source/blender/editors/include/ED_fileselect.h
M	source/blender/editors/space_file/file_draw.c
M	source/blender/editors/space_file/file_ops.c
M	source/blender/editors/space_file/filelist.c
M	source/blender/editors/space_file/filelist.h
M	source/blender/editors/space_file/filesel.c
M	source/blender/editors/space_file/space_file.c

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

diff --git a/source/blender/editors/include/ED_fileselect.h b/source/blender/editors/include/ED_fileselect.h
index 84d37c6..186a2a2 100644
--- a/source/blender/editors/include/ED_fileselect.h
+++ b/source/blender/editors/include/ED_fileselect.h
@@ -33,6 +33,7 @@
 
 struct ARegion;
 struct FileSelectParams;
+struct ScrArea;
 struct SpaceFile;
 struct bContext;
 struct wmWindowManager;
@@ -99,9 +100,9 @@ void ED_fileselect_layout_tilepos(FileLayout *layout, int tile, int *x, int *y);
 
 void ED_operatormacros_file(void);
 
-void ED_fileselect_clear(struct wmWindowManager *wm, struct SpaceFile *sfile);
+void ED_fileselect_clear(struct wmWindowManager *wm, struct ScrArea *sa, struct SpaceFile *sfile);
 
-void ED_fileselect_exit(struct wmWindowManager *wm, struct SpaceFile *sfile);
+void ED_fileselect_exit(struct wmWindowManager *wm, struct ScrArea *sa, struct SpaceFile *sfile);
 
 int ED_file_extension_icon(const char *relname);
 
diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c
index 91fe078..0858d5a 100644
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@ -390,6 +390,7 @@ static void renamebutton_cb(bContext *C, void *UNUSED(arg1), char *oldname)
 	char filename[FILE_MAX + 12];
 	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = (SpaceFile *)CTX_wm_space_data(C);
+	ScrArea *sa = CTX_wm_area(C);
 	ARegion *ar = CTX_wm_region(C);
 
 	BLI_make_file_string(G.main->name, orgname, sfile->params->dir, oldname);
@@ -400,7 +401,7 @@ static void renamebutton_cb(bContext *C, void *UNUSED(arg1), char *oldname)
 		if (!BLI_exists(newname)) {
 			BLI_rename(orgname, newname);
 			/* to make sure we show what is on disk */
-			ED_fileselect_clear(wm, sfile);
+			ED_fileselect_clear(wm, sa, sfile);
 		}
 
 		ED_region_tag_redraw(ar);
diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c
index 0516248..4c1f678 100644
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@ -1095,9 +1095,10 @@ static int file_refresh_exec(bContext *C, wmOperator *UNUSED(unused))
 {
 	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = CTX_wm_space_file(C);
+	ScrArea *sa = CTX_wm_area(C);
 	struct FSMenu *fsmenu = ED_fsmenu_get();
 
-	ED_fileselect_clear(wm, sfile);
+	ED_fileselect_clear(wm, sa, sfile);
 
 	/* refresh system directory menu */
 	fsmenu_refresh_system_category(fsmenu);
@@ -1314,6 +1315,7 @@ int file_directory_new_exec(bContext *C, wmOperator *op)
 
 	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = CTX_wm_space_file(C);
+	ScrArea *sa = CTX_wm_area(C);
 	
 	if (!sfile->params) {
 		BKE_report(op->reports, RPT_WARNING, "No parent directory given");
@@ -1351,7 +1353,7 @@ int file_directory_new_exec(bContext *C, wmOperator *op)
 	sfile->scroll_offset = 0;
 
 	/* reload dir to make sure we're seeing what's in the directory */
-	ED_fileselect_clear(wm, sfile);
+	ED_fileselect_clear(wm, sa, sfile);
 
 	if (RNA_boolean_get(op->ptr, "open")) {
 		BLI_strncpy(sfile->params->dir, path, sizeof(sfile->params->dir));
@@ -1568,10 +1570,11 @@ static int file_hidedot_exec(bContext *C, wmOperator *UNUSED(unused))
 {
 	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = CTX_wm_space_file(C);
+	ScrArea *sa = CTX_wm_area(C);
 	
 	if (sfile->params) {
 		sfile->params->flag ^= FILE_HIDE_DOT;
-		ED_fileselect_clear(wm, sfile);
+		ED_fileselect_clear(wm, sa, sfile);
 		WM_event_add_notifier(C, NC_SPACE | ND_SPACE_FILE_LIST, NULL);
 	}
 	
@@ -1768,6 +1771,7 @@ int file_delete_exec(bContext *C, wmOperator *UNUSED(op))
 	char str[FILE_MAX];
 	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = CTX_wm_space_file(C);
+	ScrArea *sa = CTX_wm_area(C);
 	FileDirEntry *file;
 	int numfiles = filelist_numfiles(sfile->files);
 	int i;
@@ -1780,7 +1784,7 @@ int file_delete_exec(bContext *C, wmOperator *UNUSED(op))
 		}
 	}
 	
-	ED_fileselect_clear(wm, sfile);
+	ED_fileselect_clear(wm, sa, sfile);
 	WM_event_add_notifier(C, NC_SPACE | ND_SPACE_FILE_LIST, NULL);
 	
 	return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index a122ff2..c197e1a 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -1574,8 +1574,8 @@ bool filelist_file_cache_block(struct FileList *filelist, const int index)
 
 	BLI_assert((end_index - start_index) <= FILELIST_ENTRYCACHESIZE) ;
 
-	printf("%s: [%d:%d] around index %d (current cache: [%d:%d])\n", __func__,
-	       start_index, end_index, index, cache->block_start_index, cache->block_end_index);
+//	printf("%s: [%d:%d] around index %d (current cache: [%d:%d])\n", __func__,
+//	       start_index, end_index, index, cache->block_start_index, cache->block_end_index);
 
 	/* If we have something to (re)cache... */
 	if ((start_index != cache->block_start_index) || (end_index != cache->block_end_index)) {
@@ -1740,7 +1740,7 @@ bool filelist_file_cache_block(struct FileList *filelist, const int index)
 
 	cache->block_center_index = index;
 
-	printf("%s Finished!\n", __func__);
+//	printf("%s Finished!\n", __func__);
 
 	return true;
 }
@@ -2586,12 +2586,12 @@ void filelist_readjob_start(FileList *filelist, const bContext *C)
 	WM_jobs_start(CTX_wm_manager(C), wm_job);
 }
 
-void filelist_readjob_stop(wmWindowManager *wm, FileList *filelist)
+void filelist_readjob_stop(wmWindowManager *wm, ScrArea *sa)
 {
-	WM_jobs_kill_type(wm, filelist, WM_JOB_TYPE_FILESEL_READDIR);
+	WM_jobs_kill_type(wm, sa, WM_JOB_TYPE_FILESEL_READDIR);
 }
 
-int filelist_readjob_running(wmWindowManager *wm, FileList *filelist)
+int filelist_readjob_running(wmWindowManager *wm, ScrArea *sa)
 {
-	return WM_jobs_test(wm, filelist, WM_JOB_TYPE_FILESEL_READDIR);
+	return WM_jobs_test(wm, sa, WM_JOB_TYPE_FILESEL_READDIR);
 }
diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h
index 5d025fe..4ac3720 100644
--- a/source/blender/editors/space_file/filelist.h
+++ b/source/blender/editors/space_file/filelist.h
@@ -114,8 +114,8 @@ bool                filelist_islibrary(struct FileList *filelist, char *dir, cha
 void                filelist_freelib(struct FileList *filelist);
 
 void                filelist_readjob_start(struct FileList *filelist, const struct bContext *C);
-void                filelist_readjob_stop(struct wmWindowManager *wm, struct FileList *filelist);
-int                 filelist_readjob_running(struct wmWindowManager *wm, struct FileList *filelist);
+void                filelist_readjob_stop(struct wmWindowManager *wm, struct ScrArea *sa);
+int                 filelist_readjob_running(struct wmWindowManager *wm, struct ScrArea *sa);
 
 bool                filelist_cache_previews_update(struct FileList *filelist);
 void                filelist_cache_previews_set(struct FileList *filelist, const bool use_previews);
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c
index a38e1a6..5895705 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -542,9 +542,10 @@ void ED_file_change_dir(bContext *C, const bool checkdir)
 {
 	wmWindowManager *wm = CTX_wm_manager(C);
 	SpaceFile *sfile = CTX_wm_space_file(C);
+	ScrArea *sa = CTX_wm_area(C);
 
 	if (sfile->params) {
-		ED_fileselect_clear(wm, sfile);
+		ED_fileselect_clear(wm, sa, sfile);
 
 		/* Clear search string, it is very rare to want to keep that filter while changing dir,
 		 * and usually very annoying to keep it actually! */
@@ -660,11 +661,11 @@ int autocomplete_file(struct bContext *C, char *str, void *UNUSED(arg_v))
 	return match;
 }
 
-void ED_fileselect_clear(struct wmWindowManager *wm, struct SpaceFile *sfile)
+void ED_fileselect_clear(wmWindowManager *wm, ScrArea *sa, SpaceFile *sfile)
 {
 	/* only NULL in rare cases - [#29734] */
 	if (sfile->files) {
-		filelist_readjob_stop(wm, sfile->files);
+		filelist_readjob_stop(wm, sa);
 		filelist_freelib(sfile->files);
 		filelist_clear(sfile->files);
 	}
@@ -673,7 +674,7 @@ void ED_fileselect_clear(struct wmWindowManager *wm, struct SpaceFile *sfile)
 	WM_main_add_notifier(NC_SPACE | ND_SPACE_FILE_LIST, NULL);
 }
 
-void ED_fileselect_exit(struct wmWindowManager *wm, struct SpaceFile *sfile)
+void ED_fileselect_exit(wmWindowManager *wm, ScrArea *sa, SpaceFile *sfile)
 {
 	if (!sfile) return;
 	if (sfile->op) {
@@ -685,7 +686,7 @@ void ED_fileselect_exit(struct wmWindowManager *wm, struct SpaceFile *sfile)
 	folderlist_free(sfile->folders_next);
 	
 	if (sfile->files) {
-		ED_fileselect_clear(wm, sfile);
+		ED_fileselect_clear(wm, sa, sfile);
 		filelist_free(sfile->files);
 		MEM_freeN(sfile->files);
 		sfile->files = NULL;
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c
index 0745ce0..d235131 100644
--- a/source/blender/editors/space_file/space_file.c
+++ b/source/blender/editors/space_file/space_file.c
@@ -177,7 +177,7 @@ static void file_exit(wmWindowManager *wm, ScrArea *sa)
 		sfile->previews_timer = NULL;
 	}
 
-	ED_fileselect_exit(wm, sfile);
+	ED_fileselect_exit(wm, sa, sfile);
 }
 
 static SpaceLink *file_duplicate(SpaceLink *sl)
@@ -237,7 +237,7 @@ static void file_refresh(const bContext *C, ScrArea *sa)
 	sfile->recentnr = fsmenu_get_active_indices(fsmenu, FS_CATEGORY_RECENT, params->dir);
 
 	if (filelist_force_reset(sfile->files)) {
-		filelist_readjob_stop(wm, sfile->files);
+		filelist_readjob_stop(wm, sa);
 		filelist_clear(sfile->files);
 	}




More information about the Bf-blender-cvs mailing list