[Bf-blender-cvs] [5cf39b2] asset-experiments: More cleanup, rename and commentting.
Bastien Montagne
noreply at git.blender.org
Thu Dec 11 20:12:35 CET 2014
Commit: 5cf39b228d43cd722d2a27d469631ae278ee1fde
Author: Bastien Montagne
Date: Thu Dec 11 18:37:58 2014 +0100
Branches: asset-experiments
https://developer.blender.org/rB5cf39b228d43cd722d2a27d469631ae278ee1fde
More cleanup, rename and commentting.
Also, definitively removed 'G.main.name protection' from lib reading
code. I do absolutely not see how listing a separate blend file handle
could possibly affect that anyway - and we do not want to access
G from non-main thread I'd bet...
===================================================================
M source/blender/editors/space_file/filelist.c
M source/blender/editors/space_file/filelist.h
===================================================================
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index 60f35ca..a8e3c56 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -461,7 +461,7 @@ ListBase *folderlist_duplicate(ListBase *folderlist)
/* ------------------FILELIST------------------------ */
static void filelist_readjob_main(struct FileList *, short *stop, short *do_update, ThreadMutex *lock);
-static void filelist_readjob_library(struct FileList *, short *stop, short *do_update, ThreadMutex *lock);
+static void filelist_readjob_lib(struct FileList *, short *stop, short *do_update, ThreadMutex *lock);
static void filelist_readjob_dir(struct FileList *, short *stop, short *do_update, ThreadMutex *lock);
/* helper, could probably go in BKE actually? */
@@ -650,7 +650,7 @@ FileList *filelist_new(short type)
p->filterf = is_filtered_main;
break;
case FILE_LOADLIB:
- p->read_jobf = filelist_readjob_library;
+ p->read_jobf = filelist_readjob_lib;
p->filterf = is_filtered_lib;
break;
default:
@@ -1178,48 +1178,6 @@ static void filelist_setfiletypes(const char *root, struct direntry *files, cons
}
}
-static void filelist_merge_sublist_ex(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)
-{
- if (num_subfiles) {
- struct direntry *f;
- int new_numfiles = num_subfiles + *filelist_used_size;
- char dir[FILE_MAX];
- int i, j;
-
- if (new_numfiles > *filelist_buff_size) {
- struct direntry *new_filelist;
-
- *filelist_buff_size = new_numfiles * 2;
- new_filelist = malloc(sizeof(*new_filelist) * (size_t)*filelist_buff_size);
- if (*filelist_buff && *filelist_used_size) {
- memcpy(new_filelist, *filelist_buff, sizeof(*new_filelist) * (size_t)*filelist_used_size);
- free(*filelist_buff);
- }
- *filelist_buff = new_filelist;
- }
- for (i = *filelist_used_size, j = 0, f = subfiles; j < num_subfiles; j++, f++) {
- if (ignore_breadcrumbs && FILENAME_IS_BREADCRUMBS(f->relname)) {
- /* Ignore 'inner' breadcrumbs! */
- new_numfiles--;
- continue;
- }
- BLI_join_dirfile(dir, sizeof(dir), subdir, f->relname);
- BLI_cleanup_file(root, dir);
- BLI_path_rel(dir, root);
- (*filelist_buff)[i] = *f;
- (*filelist_buff)[i].relname = BLI_strdup(dir + 2); /* + 2 to remove '//' added by BLI_path_rel */
- /* those pointers are given to new_filelist... */
- f->path = NULL;
- f->poin = NULL;
- f->image = NULL;
- i++;
- }
-
- *filelist_used_size = new_numfiles;
- }
-}
-
int filelist_empty(struct FileList *filelist)
{
return filelist->filelist == NULL;
@@ -1407,13 +1365,64 @@ static unsigned int groupname_to_filter_id(const char *group)
return 0;
}
}
-
-static void filelist_from_library_ex(const char *root, struct direntry **files, int *num_files)
+
+/*
+ * From here, we are in 'Job Context', i.e. have to be careful about sharing stuff between bacground working thread
+ * and main one (used by UI among other things).
+ */
+
+/* This helper is highly specialized for our needs, it 'transfers' most data (strings/pointers) from subfiles to
+ * filelist_buff. Only dirname->relname is actually duplicated.
+ */
+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)
+{
+ if (num_subfiles) {
+ struct direntry *f;
+ int new_numfiles = num_subfiles + *filelist_used_size;
+ char dir[FILE_MAX];
+ int i, j;
+
+ if (new_numfiles > *filelist_buff_size) {
+ struct direntry *new_filelist;
+
+ *filelist_buff_size = new_numfiles * 2;
+ new_filelist = malloc(sizeof(*new_filelist) * (size_t)*filelist_buff_size);
+ if (*filelist_buff && *filelist_used_size) {
+ memcpy(new_filelist, *filelist_buff, sizeof(*new_filelist) * (size_t)*filelist_used_size);
+ free(*filelist_buff);
+ }
+ *filelist_buff = new_filelist;
+ }
+ for (i = *filelist_used_size, j = 0, f = subfiles; j < num_subfiles; j++, f++) {
+ if (ignore_breadcrumbs && FILENAME_IS_BREADCRUMBS(f->relname)) {
+ /* Ignore 'inner' breadcrumbs! */
+ new_numfiles--;
+ continue;
+ }
+ BLI_join_dirfile(dir, sizeof(dir), subdir, f->relname);
+ BLI_cleanup_file(root, dir);
+ BLI_path_rel(dir, root);
+ (*filelist_buff)[i] = *f;
+ (*filelist_buff)[i].relname = BLI_strdup(dir + 2); /* + 2 to remove '//' added by BLI_path_rel */
+ /* those pointers are given to new_filelist... */
+ f->path = NULL;
+ f->poin = NULL;
+ f->image = NULL;
+ i++;
+ }
+
+ *filelist_used_size = new_numfiles;
+ }
+}
+
+static void filelist_readjob_list_lib(const char *root, struct direntry **files, int *num_files)
{
LinkNode *l, *names, *previews;
struct ImBuf *ima;
int ok, i, nprevs, nnames, idcode = 0;
- //~ char filename[FILE_MAX];
char dir[FILE_MAX], *group;
struct BlendHandle *libfiledata = NULL;
@@ -1424,8 +1433,6 @@ static void filelist_from_library_ex(const char *root, struct direntry **files,
return;
}
- //~ BLI_strncpy(filename, G.main->name, sizeof(filename));
-
/* there we go */
libfiledata = BLO_blendhandle_from_file(dir, NULL);
if (libfiledata == NULL) {
@@ -1498,18 +1505,12 @@ static void filelist_from_library_ex(const char *root, struct direntry **files,
if (previews) {
BLI_linklist_free(previews, BKE_previewimg_freefunc);
}
-
- //~ BLI_strncpy(G.main->name, filename, sizeof(filename)); /* prevent G.main->name to change */
-}
-
-void filelist_hideparent(struct FileList *filelist, short hide)
-{
- filelist->hide_parent = hide;
}
#if 0
/* Kept for reference here, in case we want to add back that feature later. We do not need it currently. */
-void filelist_from_main(struct FileList *filelist)
+/* Code ***NOT*** updated for job stuff! */
+static void filelist_readjob_main_rec(struct FileList *filelist)
{
ID *id;
struct direntry *files, *firstlib = NULL;
@@ -1529,9 +1530,9 @@ void filelist_from_main(struct FileList *filelist)
/* make directories */
#ifdef WITH_FREESTYLE
- filelist->numfiles = 25;
-#else
filelist->numfiles = 24;
+#else
+ filelist->numfiles = 23;
#endif
filelist->filelist = (struct direntry *)malloc(filelist->numfiles * sizeof(struct direntry));
@@ -1541,30 +1542,30 @@ void filelist_from_main(struct FileList *filelist)
}
filelist->filelist[0].relname = BLI_strdup("..");
- filelist->filelist[2].relname = BLI_strdup("Scene");
- filelist->filelist[3].relname = BLI_strdup("Object");
- filelist->filelist[4].relname = BLI_strdup("Mesh");
- filelist->filelist[5].relname = BLI_strdup("Curve");
- filelist->filelist[6].relname = BLI_strdup("Metaball");
- filelist->filelist[7].relname = BLI_strdup("Material");
- filelist->filelist[8].relname = BLI_strdup("Texture");
- filelist->filelist[9].relname = BLI_strdup("Image");
- filelist->filelist[10].relname = BLI_strdup("Ika");
- filelist->filelist[11].relname = BLI_strdup("Wave");
- filelist->filelist[12].relname = BLI_strdup("Lattice");
- filelist->filelist[13].relname = BLI_strdup("Lamp");
- filelist->filelist[14].relname = BLI_strdup("Camera");
- filelist->filelist[15].relname = BLI_strdup("Ipo");
- filelist->filelist[16].relname = BLI_strdup("World");
- filelist->filelist[17].relname = BLI_strdup("Screen");
- filelist->filelist[18].relname = BLI_strdup("VFont");
- filelist->filelist[19].relname = BLI_strdup("Text");
- filelist->filelist[20].relname = BLI_strdup("Armature");
- filelist->filelist[21].relname = BLI_strdup("Action");
- filelist->filelist[22].relname = BLI_strdup("NodeTree");
- filelist->filelist[23].relname = BLI_strdup("Speaker");
+ filelist->filelist[1].relname = BLI_strdup("Scene");
+ filelist->filelist[2].relname = BLI_strdup("Object");
+ filelist->filelist[3].relname = BLI_strdup("Mesh");
+ filelist->filelist[4].relname = BLI_strdup("Curve");
+ filelist->filelist[5].relname = BLI_strdup("Metaball");
+ filelist->filelist[6].relname = BLI_strdup("Material");
+ filelist->filelist[7].relname = BLI_strdup("Texture");
+ filelist->filelist[8].relname = BLI_strdup("Image");
+ filelist->filelist[9].relname = BLI_strdup("Ika");
+ filelist->filelist[10].relname = BLI_strdup("Wave");
+ filelist->filelist[11].relname = BLI_strdup("Lattice");
+ filelist->filelist[12].relname = BLI_strdup("Lamp");
+ filelist->filelist[13].relname = BLI_strdup("Camera");
+ filelist->filelist[14].relname = BLI_strdup("Ipo");
+ filelist->filelist[15].relname = BLI_strdup("World");
+ filelist->filelist[16].relname = BLI_strdup("Screen");
+ filelist->filelist[17].relname = BLI_strdup("VFont");
+ filelist->filelist[18].relname = BLI_strdup("Text");
+ filelist->filelist[19].relname = BLI_strdup("Armature");
+ filelist->filelist[20].relname = BLI_strdup("Action");
+ filelist->filelist[21].relname = BLI_strdup("NodeTree");
+ filelist->filelist[22].relname = BLI_strdup("Speaker");
#ifdef WITH_FREESTYLE
- filelist->filelist[24].relname = BLI_strdup("FreestyleLineStyle");
+ filelist->filelist[23].relname = BLI_strdup("FreestyleLineStyle");
#endif
filelist_sort(filelist);
}
@@ -1660,9 +1661,7 @@ void filelist_from_main(struct FileList *filelist)
}
#endif
-
-
-static void filelist_readjob_dir_ex(
+static void filelist_readjob_dir_rec(
FileList *filelist, int *filelist_buffsize, const char *dir, const char *filter_glob, const int recursion_level,
short *stop, short *do_update, ThreadMutex *lock)
{
@@ -1681,8 +1680,8 @@ static void filelist_readjob_dir_ex(
BLI_mutex_lock(lock);
- filelist_merge_sublist_ex(&filelist->filelist, filelist_buffsize, &filelist->numfiles, filelist->dir,
- dir, files, num_files, recursion_level != 0);
+ filelist_readjob_merge_sublist(&filelist->filelist, filelist_buffsize, &filelist->numfiles, filelist->dir,
+ dir, files, num_files, recursion_level != 0);
BLI_mutex_unloc
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list