diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-07-02 21:44:57 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-07-02 21:44:57 +0400 |
commit | 213a45bed83bcb8afdc8ada8fd69b229a4a522f9 (patch) | |
tree | 93325f5369261cb0be3a0f50be33c51b7dc6e596 /source/blender/editors/space_file | |
parent | 643ec7a12f7f441b0c74430cbfd4beee3c7cc9be (diff) |
changes to file selector so 'directory' property from an operator is used when available.
also made some other changes to the path functions used.
Diffstat (limited to 'source/blender/editors/space_file')
-rw-r--r-- | source/blender/editors/space_file/filesel.c | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index abb3a6a7a35..086d4f9cce2 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -102,7 +102,6 @@ FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile) short ED_fileselect_set_params(SpaceFile *sfile) { - char name[FILE_MAX], dir[FILE_MAX], file[FILE_MAX]; FileSelectParams *params; wmOperator *op = sfile->op; @@ -110,10 +109,7 @@ short ED_fileselect_set_params(SpaceFile *sfile) if (!sfile->params) { sfile->params= MEM_callocN(sizeof(FileSelectParams), "fileselparams"); /* set path to most recently opened .blend */ - BLI_strncpy(sfile->params->dir, G.sce, sizeof(sfile->params->dir)); - BLI_split_dirfile(G.sce, dir, file); - BLI_strncpy(sfile->params->file, file, sizeof(sfile->params->file)); - BLI_make_file_string(G.sce, sfile->params->dir, dir, ""); /* XXX needed ? - also solve G.sce */ + BLI_split_dirfile(G.sce, sfile->params->dir, sfile->params->file); } params = sfile->params; @@ -127,19 +123,33 @@ short ED_fileselect_set_params(SpaceFile *sfile) else params->type = FILE_SPECIAL; - if (RNA_property_is_set(op->ptr, "filepath")) { + if (RNA_struct_find_property(op->ptr, "filepath") && RNA_property_is_set(op->ptr, "filepath")) { + char name[FILE_MAX]; RNA_string_get(op->ptr, "filepath", name); if (params->type == FILE_LOADLIB) { BLI_strncpy(params->dir, name, sizeof(params->dir)); - BLI_cleanup_dir(G.sce, params->dir); - } else { - /* if operator has path set, use it, otherwise keep the last */ - BLI_path_abs(name, G.sce); - BLI_split_dirfile(name, dir, file); - BLI_strncpy(params->file, file, sizeof(params->file)); - BLI_make_file_string(G.sce, params->dir, dir, ""); /* XXX needed ? - also solve G.sce */ + sfile->params->file[0]= '\0'; + } + else { + BLI_split_dirfile(name, sfile->params->dir, sfile->params->file); } } + else { + if (RNA_struct_find_property(op->ptr, "directory") && RNA_property_is_set(op->ptr, "directory")) { + RNA_string_get(op->ptr, "directory", params->dir); + sfile->params->file[0]= '\0'; + } + + if (RNA_struct_find_property(op->ptr, "filename") && RNA_property_is_set(op->ptr, "filename")) { + RNA_string_get(op->ptr, "filename", params->file); + } + } + + if(params->dir[0]) { + BLI_cleanup_dir(G.sce, params->dir); + BLI_path_abs(params->dir, G.sce); + } + params->filter = 0; if(RNA_struct_find_property(op->ptr, "filter_blender")) params->filter |= RNA_boolean_get(op->ptr, "filter_blender") ? BLENDERFILE : 0; |