diff options
Diffstat (limited to 'source/blender/editors/space_file/filesel.c')
-rw-r--r-- | source/blender/editors/space_file/filesel.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index 51058c0e90b..868e28207c5 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -391,15 +391,18 @@ FileLayout* ED_fileselect_get_layout(struct SpaceFile *sfile, struct ARegion *ar return sfile->layout; } -void file_change_dir(struct SpaceFile *sfile, int checkdir) +void file_change_dir(bContext *C, int checkdir) { + SpaceFile *sfile= CTX_wm_space_file(C); + if (sfile->params) { + ED_fileselect_clear(C, sfile); + if(checkdir && BLI_is_dir(sfile->params->dir)==0) { BLI_strncpy(sfile->params->dir, filelist_dir(sfile->files), sizeof(sfile->params->dir)); /* could return but just refresh the current dir */ } - filelist_setdir(sfile->files, sfile->params->dir); if(folderlist_clear_next(sfile)) @@ -407,8 +410,6 @@ void file_change_dir(struct SpaceFile *sfile, int checkdir) folderlist_pushdir(sfile->folders_prev, sfile->params->dir); - filelist_free(sfile->files); - sfile->params->active_file = -1; } } @@ -460,3 +461,17 @@ void autocomplete_directory(struct bContext *C, char *str, void *arg_v) } } } + +void ED_fileselect_clear(struct bContext *C, struct SpaceFile *sfile) +{ + thumbnails_stop(sfile->files, C); + filelist_freelib(sfile->files); + filelist_free(sfile->files); + sfile->params->active_file = -1; + WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_LIST, NULL); +} + +void ED_fileselect_exit(struct bContext *C, struct SpaceFile *sfile) +{ + thumbnails_stop(sfile->files, C); +} |