diff options
author | Andrea Weikert <elubie@gmx.net> | 2007-11-10 12:11:42 +0300 |
---|---|---|
committer | Andrea Weikert <elubie@gmx.net> | 2007-11-10 12:11:42 +0300 |
commit | f9e35056af9940026a670fad351a3f7e02448a04 (patch) | |
tree | a907f1d70e0e899051c485e31845bf5a4f1eff04 /source/blender/src/editimasel.c | |
parent | 234bb419067d138626e89ffb159080f427425a0e (diff) |
== imagebrowser ==
* bugfix: calling imagebrowser with relative path results in non-existing dir
* cleanup: removed unneeded BIF_filelist_appenddir function
* added check for valid relative base when activating imagebrowser (like in filebrowser)
Diffstat (limited to 'source/blender/src/editimasel.c')
-rw-r--r-- | source/blender/src/editimasel.c | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/source/blender/src/editimasel.c b/source/blender/src/editimasel.c index ed5465e938f..8bf5b0f03cb 100644 --- a/source/blender/src/editimasel.c +++ b/source/blender/src/editimasel.c @@ -127,6 +127,25 @@ static int fnmatch(const char *pattern, const char *string, int flags) #include <fnmatch.h> #endif +static void imasel_split_file(SpaceImaSel *simasel, char *s1) +{ + char string[FILE_MAX], dir[FILE_MAX], file[FILE_MAX]; + + BLI_strncpy(string, s1, sizeof(string)); + + BLI_split_dirfile(string, dir, file); + + if(simasel->files) { + BIF_filelist_free(simasel->files); + } + BLI_strncpy(simasel->file, file, sizeof(simasel->file)); + BLI_strncpy(simasel->dir, dir, sizeof(simasel->dir)); + + BIF_filelist_setdir(simasel->files, dir); + + BLI_make_file_string(G.sce, simasel->dir, dir, ""); +} + /**************** IMAGESELECT ******************************/ /* the complete call; pulldown menu, and three callback types */ @@ -174,8 +193,10 @@ static void activate_imageselect_(int type, char *title, char *file, short *menu simasel->files = BIF_filelist_new(); } - if(BLI_convertstringcode(name, G.sce, G.scene->r.cfra)) simasel->flag |= FILE_STRINGCODE; - else simasel->flag &= ~FILE_STRINGCODE; + if(G.relbase_valid && BLI_convertstringcode(name, G.sce, G.scene->r.cfra)) + simasel->flag |= FILE_STRINGCODE; + else + simasel->flag &= ~FILE_STRINGCODE; if (U.uiflag & USER_HIDE_DOT) simasel->flag |= FILE_HIDE_DOT; @@ -200,28 +221,23 @@ static void activate_imageselect_(int type, char *title, char *file, short *menu } } else if(type==FILE_LOADLIB) { - BLI_strncpy(simasel->dir, name, sizeof(simasel->dir)); - BIF_filelist_setdir(simasel->files, simasel->dir); + if( BIF_filelist_islibrary(simasel->files, temp, group) ) { /* force a reload of the library-filelist */ BIF_filelist_free(simasel->files); BIF_filelist_freelib(simasel->files); + BLI_strncpy(simasel->dir, name, sizeof(simasel->dir)); BIF_filelist_setdir(simasel->files, simasel->dir); BIF_filelist_settype(simasel->files, type); } else { - BLI_split_dirfile(file, temp, name); - BLI_strncpy(simasel->dir, temp, sizeof(simasel->dir)); - BIF_filelist_setdir(simasel->files, simasel->dir); - BIF_filelist_free(simasel->files); + imasel_split_file(simasel, name); BIF_filelist_freelib(simasel->files); BIF_filelist_settype(simasel->files, type); } } else { /* FILE_BLENDER */ - BLI_split_dirfile(file, temp, name); - BIF_filelist_free(simasel->files); - BIF_filelist_setdir(simasel->files, temp); + imasel_split_file(simasel, name); BIF_filelist_settype(simasel->files, type); BLI_cleanup_dir(G.sce, simasel->dir); @@ -922,18 +938,16 @@ void winqreadimaselspace(ScrArea *sa, void *spacedata, BWinEvent *evt) file = BIF_filelist_file(simasel->files, simasel->active_file); if(file && S_ISDIR(file->type)) { - - BIF_filelist_appenddir(simasel->files, file->relname); - BLI_strncpy(simasel->dir, BIF_filelist_dir(simasel->files), FILE_MAXDIR); + strcat(simasel->dir, file->relname); strcat(simasel->dir,"/"); simasel->file[0] = '\0'; BLI_cleanup_dir(G.sce, simasel->dir); + BIF_filelist_setdir(simasel->files, simasel->dir); BIF_filelist_free(simasel->files); simasel->active_file = -1; simasel->scrollpos = 0; do_draw = 1; - do_headdraw = 1; - + do_headdraw = 1; } else if (file) { |