diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 16 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.h | 4 | ||||
-rw-r--r-- | source/blender/renderconverter/intern/convertBlenderScene.c | 2 | ||||
-rw-r--r-- | source/blender/src/filesel.c | 13 |
4 files changed, 27 insertions, 8 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 8602092405f..5f0d684695d 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -871,6 +871,7 @@ FileData *blo_openblenderfile(char *name) } else { FileData *fd = filedata_new(); fd->filedes = file; + BLI_strncpy(fd->filename, name, sizeof(fd->filename)); // now only in use by library append fd->buffersize = BLI_filesize(file); fd->read = fd_read_from_file; @@ -5506,10 +5507,11 @@ void BLO_library_append(SpaceFile *sfile, char *dir, int idcode) { FileData *fd= (FileData*) sfile->libfiledata; Main *mainl; - int a, totsel=0,count=0; - float *curs,centerloc[3],vec[3],min[3],max[3]; Base *centerbase; Object *ob; + float *curs,centerloc[3],vec[3],min[3],max[3]; + int a, totsel=0,count=0; + char filename[FILE_MAXDIR+FILE_MAXFILE]; INIT_MINMAX(min, max); @@ -5538,6 +5540,11 @@ void BLO_library_append(SpaceFile *sfile, char *dir, int idcode) } /* now we have or selected, or an indicated file */ + /* make copy of the 'last loaded filename', we need to restore it */ + BLI_strncpy(filename, G.sce, sizeof(filename)); + BLI_strncpy(G.sce, fd->filename, sizeof(filename)); // already opened file, to reconstruct relative paths + + if(sfile->flag & FILE_AUTOSELECT) scene_deselect_all(G.scene); fd->mainlist.first= fd->mainlist.last= G.main; @@ -5614,8 +5621,11 @@ void BLO_library_append(SpaceFile *sfile, char *dir, int idcode) centerbase= centerbase->next; } } - } + + /* restore the 'last loaded filename' */ + BLI_strncpy(G.sce, filename, sizeof(filename)); + } /* ************* READ LIBRARY ************** */ diff --git a/source/blender/blenloader/intern/readfile.h b/source/blender/blenloader/intern/readfile.h index e198752f130..19534095f98 100644 --- a/source/blender/blenloader/intern/readfile.h +++ b/source/blender/blenloader/intern/readfile.h @@ -52,7 +52,9 @@ typedef struct FileData { // variables needed for reading from file int filedes; - + // now only in use for library appending + char filename[FILE_MAXDIR+FILE_MAXFILE]; + // variables needed for reading from stream char headerdone; int inbuffer; diff --git a/source/blender/renderconverter/intern/convertBlenderScene.c b/source/blender/renderconverter/intern/convertBlenderScene.c index 32ea28d2b9c..e9d0b5b9070 100644 --- a/source/blender/renderconverter/intern/convertBlenderScene.c +++ b/source/blender/renderconverter/intern/convertBlenderScene.c @@ -3013,7 +3013,7 @@ void RE_rotateBlenderScene(void) ob= ob->id.next; } - init_render_world(); /* do first, because of ambient */ + init_render_world(); /* do first, because of ambient. also requires R.osa set correct */ init_render_textures(); init_render_materials(); diff --git a/source/blender/src/filesel.c b/source/blender/src/filesel.c index d089e51bfcd..5e8d2e17b6f 100644 --- a/source/blender/src/filesel.c +++ b/source/blender/src/filesel.c @@ -2236,9 +2236,10 @@ static void do_library_append(SpaceFile *sfile) static void library_to_filelist(SpaceFile *sfile) { - char dir[FILE_MAXDIR], group[24]; - int ok, i, nnames, idcode; LinkNode *l, *names; + int ok, i, nnames, idcode; + char filename[FILE_MAXDIR+FILE_MAXFILE]; + char dir[FILE_MAXDIR], group[24]; /* name test */ ok= is_a_library(sfile, dir, group); @@ -2249,10 +2250,13 @@ static void library_to_filelist(SpaceFile *sfile) return; } + BLI_strncpy(filename, G.sce, sizeof(filename)); // G.sce = last file loaded, for UI + /* there we go */ /* for the time being only read filedata when libfiledata==0 */ if (sfile->libfiledata==0) { - sfile->libfiledata= BLO_blendhandle_from_file(dir); + sfile->libfiledata= BLO_blendhandle_from_file(dir); // this sets G.sce, we dont want it + if(sfile->libfiledata==0) return; } @@ -2295,6 +2299,9 @@ static void library_to_filelist(SpaceFile *sfile) if (len > sfile->maxnamelen) sfile->maxnamelen = len; } + + BLI_strncpy(G.sce, filename, sizeof(filename)); // prevent G.sce to change + } /* ******************* DATA SELECT ********************* */ |