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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2008-12-19 03:18:16 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2008-12-19 03:18:16 +0300
commitdfb8b21340e63334c0ec67333bccc93166e303d1 (patch)
treecc0da6d9e4b5490df353baab98f3fa2037138867 /source/blender/blenloader
parent9178dc859638815ec38d9b95d2df723892c1af38 (diff)
2.5: fix for crash reading regions of inactive spaces in an area.
Diffstat (limited to 'source/blender/blenloader')
-rw-r--r--source/blender/blenloader/intern/readfile.c23
-rw-r--r--source/blender/blenloader/intern/writefile.c3
2 files changed, 19 insertions, 7 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 7e30be90b5e..94c11e9d2e1 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4143,6 +4143,15 @@ void lib_link_screen_restore(Main *newmain, Scene *curscene)
}
}
+static void direct_link_region(FileData *fd, ARegion *ar)
+{
+ ar->handlers.first= ar->handlers.last= NULL;
+ ar->uiblocks.first= ar->uiblocks.last= NULL;
+ ar->regiondata= NULL;
+ ar->swinid= 0;
+ ar->type= NULL;
+}
+
static void direct_link_screen(FileData *fd, bScreen *sc)
{
ScrArea *sa;
@@ -4212,6 +4221,11 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
}
for (sl= sa->spacedata.first; sl; sl= sl->next) {
+ link_list(fd, &(sl->regionbase));
+
+ for(ar= sl->regionbase.first; ar; ar= ar->next)
+ direct_link_region(fd, ar);
+
if (sl->spacetype==SPACE_VIEW3D) {
View3D *v3d= (View3D*) sl;
v3d->bgpic= newdataadr(fd, v3d->bgpic);
@@ -4275,13 +4289,8 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
}
}
- for(ar= sa->regionbase.first; ar; ar= ar->next) {
- ar->handlers.first= ar->handlers.last= NULL;
- ar->uiblocks.first= ar->uiblocks.last= NULL;
- ar->regiondata= NULL;
- ar->swinid= 0;
- ar->type= NULL;
- }
+ for(ar= sa->regionbase.first; ar; ar= ar->next)
+ direct_link_region(fd, ar);
sa->actionzones.first= sa->actionzones.last= NULL;
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index d06ffe44465..1c44217bde0 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1651,6 +1651,9 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
sl= sa->spacedata.first;
while(sl) {
+ for(ar= sl->regionbase.first; ar; ar= ar->next)
+ writestruct(wd, DATA, "ARegion", 1, ar);
+
if(sl->spacetype==SPACE_VIEW3D) {
View3D *v3d= (View3D *) sl;
writestruct(wd, DATA, "View3D", 1, v3d);