Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/editors/space_file/file_ops.c11
-rw-r--r--source/blender/editors/space_file/filesel.c8
2 files changed, 11 insertions, 8 deletions
diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c
index 1b19a8d4d62..c54731cc66c 100644
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@ -1265,16 +1265,21 @@ int file_exec(bContext *C, wmOperator *exec_op)
const struct direntry *file = filelist_file(sfile->files, sfile->params->active_file);
char filepath[FILE_MAX];
- BLI_assert(!file || STREQ(file->relname, "..") || STREQ(file->relname, sfile->params->file));
+ /* if file is a directory it should be in sync with params->dir, otherwise
+ * with params->file; file->path might be NULL on link/append */
+ BLI_assert((file == NULL) ||
+ (file->path == NULL) ||
+ (STREQ(file->relname, sfile->params->file)) ||
+ (BLI_is_dir(file->path) && STRPREFIX(file->path, sfile->params->dir)));
/* directory change */
if (file && S_ISDIR(file->type)) {
if (FILENAME_IS_PARENT(file->relname)) {
BLI_parent_dir(sfile->params->dir);
}
- else if (sfile->params->file[0]) {
+ else if (file->relname) {
BLI_cleanup_dir(G.main->name, sfile->params->dir);
- strcat(sfile->params->dir, sfile->params->file);
+ strcat(sfile->params->dir, file->relname);
BLI_add_slash(sfile->params->dir);
}
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c
index ef29b720eed..21db41b27a5 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -293,7 +293,7 @@ void ED_fileselect_reset_params(SpaceFile *sfile)
void fileselect_file_set(SpaceFile *sfile, const int index)
{
const struct direntry *file = filelist_file(sfile->files, index);
- if (file && file->relname[0] && !FILENAME_IS_PARENT(file->relname)) {
+ if (file && file->relname[0] && file->path && !BLI_is_dir(file->path)) {
BLI_strncpy(sfile->params->file, file->relname, FILE_MAXFILE);
}
}
@@ -588,16 +588,14 @@ void ED_file_change_dir(bContext *C, const bool checkdir)
/* Clear search string, it is very rare to want to keep that filter while changing dir,
* and usually very annoying to keep it actually! */
sfile->params->filter_search[0] = '\0';
+ sfile->params->active_file = -1;
if (checkdir && !BLI_is_dir(sfile->params->dir)) {
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);
- /* clear selected file to avoid trying to open it from the new dir with changed path */
- sfile->params->file[0] = '\0';
- sfile->params->active_file = -1;
-
+
if (folderlist_clear_next(sfile))
folderlist_free(sfile->folders_next);