diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-10-15 15:11:52 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-10-15 15:11:52 +0400 |
commit | 734d50e8df0c06e6a4630078f4b7250fbe7d6dcc (patch) | |
tree | d93d0c54903f28d4709ad45533548715cc0fddc3 /source | |
parent | 384a1b5a5c15cfc5311f3865bde095d89130cfa5 (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')
-rw-r--r-- | source/blender/blenkernel/intern/pointcache.c | 3 | ||||
-rw-r--r-- | source/blender/editors/space_file/file_intern.h | 2 | ||||
-rw-r--r-- | source/blender/editors/space_file/file_ops.c | 17 | ||||
-rw-r--r-- | source/blender/editors/space_file/filesel.c | 10 | ||||
-rw-r--r-- | source/blender/editors/space_file/space_file.c | 4 |
5 files changed, 21 insertions, 15 deletions
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index fa0d5cba604..68f0e33a98f 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -84,9 +84,6 @@ #include "BLI_winstuff.h" #endif -static void ptcache_data_to(void **data, int type, int index, void *to); -static void ptcache_data_from(void **data, int type, void *from); - #define PTCACHE_DATA_FROM(data, type, from) if(data[type]) { memcpy(data[type], from, ptcache_data_size[type]); } #define PTCACHE_DATA_TO(data, type, index, to) if(data[type]) { memcpy(to, (char*)data[type] + (index ? index * ptcache_data_size[type] : 0), ptcache_data_size[type]); } 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); |