fixes for crashes that seem to have been introduced by changes in context handling.
TODO: initialization for windowtype pupmenu if a previous SpaceFile was there.
}
else if(sl->spacetype==SPACE_FILE) {
SpaceFile *sfile= (SpaceFile *)sl;
-
+ sfile->files= NULL;
sfile->params= NULL;
sfile->op= NULL;
/* sfile->returnfunc= NULL;
else if(sl->spacetype==SPACE_FILE) {
SpaceFile *sfile= (SpaceFile *)sl;
- sfile->params = NULL;
- sfile->op = NULL;
+ sfile->files= NULL;
+ sfile->params= NULL;
+ sfile->op= NULL;
/* XXX needs checking - best solve in filesel itself
if(sfile->libfiledata)
BLO_blendhandle_close(sfile->libfiledata);
ar->v2d.flag = V2D_VIEWSYNC_AREA_VERTICAL;
break;
case SPACE_FILE:
+ /* channel (bookmarks/directories) region */
ar= MEM_callocN(sizeof(ARegion), "area region from do_versions");
BLI_addtail(lb, ar);
ar->regiontype= RGN_TYPE_CHANNELS;
ar->alignment= RGN_ALIGN_LEFT;
ar->v2d.scroll= V2D_SCROLL_RIGHT;
+ /* button UI region */
+ ar= MEM_callocN(sizeof(ARegion), "area region from do_versions");
+ BLI_addtail(lb, ar);
+ ar->regiontype= RGN_TYPE_UI;
+ ar->alignment= RGN_ALIGN_TOP;
break;
}
}
FileSelectParams* ED_fileselect_get_params(const struct bContext *C);
-short ED_fileselect_set_params(const struct bContext *C, int type, const char *title, const char *path,
+short ED_fileselect_set_params(FileSelectParams *params, int type, const char *title, const char *path,
short flag, short display, short filter);
#endif /* ED_FILES_H */
#include "BLI_blenlib.h"
#include "BLI_linklist.h"
#include "BLI_storage_types.h"
+#include "BLI_threads.h"
#ifdef WIN32
#include "BLI_winstuff.h"
short prv_h;
short hide_dot;
unsigned int filter;
+ struct ThreadedWorker *worker;
+ LinkNode *worklist;
} FileList;
+typedef struct WorkItem
+{
+ FileList* files;
+ int item;
+} WorkItem;
+
int BIF_groupname_to_code(char *group)
{
char buf[32];
p->type = 0;
p->has_func = 0;
p->filter = 0;
+ p->worker = 0; // BLI_create_worker(void *(*do_thread)(void *), int tot, int sleep_time);
return p;
}
#include "filelist.h"
-FileSelectParams* ED_fileselect_get_params(const struct bContext *C)
-{
- SpaceLink *sl= CTX_wm_space_data(C);
- SpaceFile *sfile;
- FileSelectParams *params = 0;
-
- if (sl->spacetype == SPACE_FILE) {
- sfile= (SpaceFile*)sl;
- params = sfile->params;
- }
- return params;
-}
-
-short ED_fileselect_set_params(const struct bContext *C, int type, const char *title, const char *path,
+short ED_fileselect_set_params(FileSelectParams *params, int type, const char *title, const char *path,
short flag, short display, short filter)
{
char name[FILE_MAX], dir[FILE_MAX], file[FILE_MAX];
- SpaceLink *sl= CTX_wm_space_data(C);
- SpaceFile *sfile;
- FileSelectParams *params;
- if (sl->spacetype != SPACE_FILE) {
+ if (!params) {
return 0;
}
- sfile= (SpaceFile*)sl;
-
- if (!sfile->params) {
- sfile->params = MEM_callocN(sizeof(FileSelectParams), "fileselparams");
- }
- params = sfile->params;
params->type = type;
params->flag = flag;
BLI_split_dirfile(name, dir, file);
BLI_strncpy(params->file, file, sizeof(params->file));
BLI_strncpy(params->dir, dir, sizeof(params->dir));
- BLI_make_file_string(G.sce, params->dir, dir, ""); /* XXX needed ? - also solve G.sce */
-
- filelist_settype(sfile->files, type);
- filelist_setdir(sfile->files, params->dir);
- BLI_cleanup_dir(G.sce, params->dir); /* XXX solve G.sce */
-
- /* free: filelist and libfiledata became incorrect */
- if (sfile->files) {
- filelist_free(sfile->files);
- filelist_freelib(sfile->files);
- }
+ BLI_make_file_string(G.sce, params->dir, dir, ""); /* XXX needed ? - also solve G.sce */
}
break;
}
sfile->params= MEM_callocN(sizeof(FileSelectParams), "fileselparams");
sfile->files = filelist_new();
- ED_fileselect_set_params(C, FILE_UNIX, "", "/", 0, 0, 0);
+ ED_fileselect_set_params(sfile->params, FILE_UNIX, "", "/", 0, 0, 0);
filelist_setdir(sfile->files, sfile->params->dir);
filelist_settype(sfile->files, sfile->params->type);
/* spacetype; init callback */
static void file_init(struct wmWindowManager *wm, ScrArea *sa)
{
+ SpaceFile *sfile= sa->spacedata.first; /* XXX get through context? */
+ if (!sfile->params) {
+ sfile->params= MEM_callocN(sizeof(FileSelectParams), "fileselparams");
+ ED_fileselect_set_params(sfile->params, FILE_UNIX, "", "/", 0, 0, 0);
+ }
+ if (!sfile->files) {
+ sfile->files = filelist_new();
+ }
+
+ filelist_setdir(sfile->files, sfile->params->dir);
+ filelist_settype(sfile->files, sfile->params->type);
}
static SpaceLink *file_duplicate(SpaceLink *sl)
sfilen->op = NULL; // XXX check if operator can be duplicated
sfilen->params= MEM_dupallocN(sfileo->params);
- sfilen->params->pupmenu = NULL;
+ if (!sfilen->params) {
+ sfilen->params= MEM_callocN(sizeof(FileSelectParams), "fileselparams");
+ ED_fileselect_set_params(sfilen->params, FILE_UNIX, "", "/", 0, 0, 0);
+ sfilen->params->pupmenu = NULL;
+ }
sfilen->files = filelist_new();
filelist_setdir(sfilen->files, sfilen->params->dir);
filelist_settype(sfilen->files, sfilen->params->type);
{
/* draw entirely, view changes should be handled here */
SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
- FileSelectParams* params = ED_fileselect_get_params(C);
+ FileSelectParams* params = sfile->params;
View2D *v2d= &ar->v2d;
View2DScrollers *scrollers;
float col[3];
sfile= (SpaceFile*)CTX_wm_space_data(C);
sfile->op = op;
- ED_fileselect_set_params(C, FILE_BLENDER, "Load", "C:\\", 0, 0, 0);
+ ED_fileselect_set_params(sfile->params, FILE_BLENDER, "Load", "C:\\", 0, 0, 0);
/* screen, areas init */
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);