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
path: root/source
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2005-06-02 21:38:42 +0400
committerTon Roosendaal <ton@blender.org>2005-06-02 21:38:42 +0400
commit7654d1a711d4802c53267c00f9432be902010871 (patch)
tree87f543eb067c848bff7c34ba54f4a2129dd8bd51 /source
parent01d0b5eba83b938edc4b8af0af1ebd7cf3c78a2e (diff)
Fix for #2657
Appending from files also set the string for "last loaded file". That's a real bad one... so you can save over accidentally libraries. Another fix: appending from files that have dynamic other files linked with relative paths didn't work. (Yah, now it should all work!) renderconverter change is just a more clear comment.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenloader/intern/readfile.c16
-rw-r--r--source/blender/blenloader/intern/readfile.h4
-rw-r--r--source/blender/renderconverter/intern/convertBlenderScene.c2
-rw-r--r--source/blender/src/filesel.c13
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 ********************* */