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:
authorCampbell Barton <ideasman42@gmail.com>2009-10-15 15:11:52 +0400
committerCampbell Barton <ideasman42@gmail.com>2009-10-15 15:11:52 +0400
commit734d50e8df0c06e6a4630078f4b7250fbe7d6dcc (patch)
treed93d0c54903f28d4709ad45533548715cc0fddc3 /source/blender/editors/space_file
parent384a1b5a5c15cfc5311f3865bde095d89130cfa5 (diff)
typing in non-existant dirs now goes back to the previous dir. (also for bookmarks and when changing dir's in other places)
Diffstat (limited to 'source/blender/editors/space_file')
-rw-r--r--source/blender/editors/space_file/file_intern.h2
-rw-r--r--source/blender/editors/space_file/file_ops.c17
-rw-r--r--source/blender/editors/space_file/filesel.c10
-rw-r--r--source/blender/editors/space_file/space_file.c4
4 files changed, 21 insertions, 12 deletions
diff --git a/source/blender/editors/space_file/file_intern.h b/source/blender/editors/space_file/file_intern.h
index a99594e9575..d07ffd4b964 100644
--- a/source/blender/editors/space_file/file_intern.h
+++ b/source/blender/editors/space_file/file_intern.h
@@ -88,7 +88,7 @@ int file_hilight_set(struct SpaceFile *sfile, struct ARegion *ar, int mx, int my
/* filesel.c */
float file_string_width(const char* str);
float file_font_pointsize();
-void file_change_dir(struct SpaceFile *sfile);
+void file_change_dir(struct SpaceFile *sfile, int checkdir);
int file_select_match(struct SpaceFile *sfile, const char *pattern);
void autocomplete_directory(struct bContext *C, char *str, void *arg_v);
diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c
index c0be1ffb637..a49b0a072af 100644
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@ -177,7 +177,7 @@ static FileSelect file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, s
BLI_add_slash(params->dir);
}
- file_change_dir(sfile);
+ file_change_dir(sfile, 0);
retval = FILE_SELECT_DIR;
}
}
@@ -343,7 +343,7 @@ static int bookmark_select_invoke(bContext *C, wmOperator *op, wmEvent *event)
RNA_string_get(op->ptr, "dir", entry);
BLI_strncpy(params->dir, entry, sizeof(params->dir));
BLI_cleanup_dir(G.sce, params->dir);
- file_change_dir(sfile);
+ file_change_dir(sfile, 1);
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_LIST, NULL);
}
@@ -645,7 +645,7 @@ int file_parent_exec(bContext *C, wmOperator *unused)
if (BLI_has_parent(sfile->params->dir)) {
BLI_parent_dir(sfile->params->dir);
BLI_cleanup_dir(G.sce, sfile->params->dir);
- file_change_dir(sfile);
+ file_change_dir(sfile, 0);
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_LIST, NULL);
}
}
@@ -672,7 +672,7 @@ int file_refresh_exec(bContext *C, wmOperator *unused)
{
SpaceFile *sfile= CTX_wm_space_file(C);
- file_change_dir(sfile);
+ file_change_dir(sfile, 1);
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_LIST, NULL);
@@ -704,7 +704,7 @@ int file_previous_exec(bContext *C, wmOperator *unused)
folderlist_popdir(sfile->folders_prev, sfile->params->dir);
folderlist_pushdir(sfile->folders_next, sfile->params->dir);
- file_change_dir(sfile);
+ file_change_dir(sfile, 1);
}
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_LIST, NULL);
@@ -736,7 +736,7 @@ int file_next_exec(bContext *C, wmOperator *unused)
// update folder_prev so we can check for it in folderlist_clear_next()
folderlist_pushdir(sfile->folders_prev, sfile->params->dir);
- file_change_dir(sfile);
+ file_change_dir(sfile, 1);
}
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_LIST, NULL);
@@ -795,6 +795,8 @@ int file_directory_exec(bContext *C, wmOperator *unused)
SpaceFile *sfile= CTX_wm_space_file(C);
if(sfile->params) {
+ char prev_dir[sizeof(sfile->params->dir)];
+ BLI_strncpy(prev_dir, filelist_dir(sfile->files), sizeof(prev_dir));
if ( sfile->params->dir[0] == '~' ) {
if (sfile->params->dir[1] == '\0') {
@@ -817,7 +819,8 @@ int file_directory_exec(bContext *C, wmOperator *unused)
#endif
BLI_cleanup_dir(G.sce, sfile->params->dir);
BLI_add_slash(sfile->params->dir);
- file_change_dir(sfile);
+ file_change_dir(sfile, 1);
+
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_LIST, NULL);
}
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c
index 9f5d889c7b9..89678bffd01 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -384,9 +384,15 @@ FileLayout* ED_fileselect_get_layout(struct SpaceFile *sfile, struct ARegion *ar
return sfile->layout;
}
-void file_change_dir(struct SpaceFile *sfile)
+void file_change_dir(struct SpaceFile *sfile, int checkdir)
{
- if (sfile->params) {
+ if (sfile->params) {
+
+ if(checkdir && S_ISDIR(BLI_exists(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))
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c
index 4d3376e0e1f..91d917acfe7 100644
--- a/source/blender/editors/space_file/space_file.c
+++ b/source/blender/editors/space_file/space_file.c
@@ -180,7 +180,7 @@ static SpaceLink *file_duplicate(SpaceLink *sl)
if(sfileo->params) {
sfilen->params= MEM_dupallocN(sfileo->params);
- file_change_dir(sfilen);
+ file_change_dir(sfilen, 0);
}
if (sfileo->layout) {
sfilen->layout= MEM_dupallocN(sfileo->layout);
@@ -197,7 +197,7 @@ static void file_refresh(const bContext *C, ScrArea *sa)
sfile->folders_prev = folderlist_new();
if (!sfile->files) {
sfile->files = filelist_new(params->type);
- file_change_dir(sfile);
+ file_change_dir(sfile, 0);
params->active_file = -1; // added this so it opens nicer (ton)
}
filelist_hidedot(sfile->files, params->flag & FILE_HIDE_DOT);