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:
Diffstat (limited to 'source/blender/blenloader/intern/writefile.c')
-rw-r--r--source/blender/blenloader/intern/writefile.c45
1 files changed, 31 insertions, 14 deletions
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index d137510b510..ea6a18b2b48 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -2878,8 +2878,12 @@ static void write_area_regions(WriteData *wd, ScrArea *area)
writedata(wd, DATA, cl->len + 1, cl->line);
}
writestruct(wd, DATA, SpaceConsole, 1, sl);
-
}
+#ifdef WITH_TOPBAR_WRITING
+ else if (sl->spacetype == SPACE_TOPBAR) {
+ writestruct(wd, DATA, SpaceTopBar, 1, sl);
+ }
+#endif
else if (sl->spacetype == SPACE_USERPREF) {
writestruct(wd, DATA, SpaceUserPref, 1, sl);
}
@@ -2890,7 +2894,21 @@ static void write_area_regions(WriteData *wd, ScrArea *area)
writestruct(wd, DATA, SpaceInfo, 1, sl);
}
}
+}
+
+static void write_area_map(WriteData *wd, ScrAreaMap *area_map)
+{
+ writelist(wd, DATA, ScrVert, &area_map->vertbase);
+ writelist(wd, DATA, ScrEdge, &area_map->edgebase);
+ for (ScrArea *area = area_map->areabase.first; area; area = area->next) {
+ writestruct(wd, DATA, ScrArea, 1, area);
+
+#ifdef WITH_TOPBAR_WRITING
+ writestruct(wd, DATA, ScrGlobalAreaData, 1, area->global);
+#endif
+ write_area_regions(wd, area);
+ }
}
static void write_windowmanager(WriteData *wd, wmWindowManager *wm)
@@ -2899,6 +2917,11 @@ static void write_windowmanager(WriteData *wd, wmWindowManager *wm)
write_iddata(wd, &wm->id);
for (wmWindow *win = wm->windows.first; win; win = win->next) {
+#ifndef WITH_TOPBAR_WRITING
+ /* Don't write global areas yet, while we make changes to them. */
+ ScrAreaMap global_areas = win->global_areas;
+ memset(&win->global_areas, 0, sizeof(win->global_areas));
+#endif
/* update deprecated screen member (for so loading in 2.7x uses the correct screen) */
win->screen = BKE_workspace_active_screen_get(win->workspace_hook);
@@ -2907,6 +2930,12 @@ static void write_windowmanager(WriteData *wd, wmWindowManager *wm)
writestruct(wd, DATA, WorkSpaceInstanceHook, 1, win->workspace_hook);
writestruct(wd, DATA, Stereo3dFormat, 1, win->stereo3d_format);
+#ifdef WITH_TOPBAR_WRITING
+ write_area_map(wd, &win->global_areas);
+#else
+ win->global_areas = global_areas;
+#endif
+
/* data is written, clear deprecated data again */
win->screen = NULL;
}
@@ -2922,19 +2951,7 @@ static void write_screen(WriteData *wd, bScreen *sc)
write_previews(wd, sc->preview);
/* direct data */
- for (ScrVert *sv = sc->vertbase.first; sv; sv = sv->next) {
- writestruct(wd, DATA, ScrVert, 1, sv);
- }
-
- for (ScrEdge *se = sc->edgebase.first; se; se = se->next) {
- writestruct(wd, DATA, ScrEdge, 1, se);
- }
-
- for (ScrArea *sa = sc->areabase.first; sa; sa = sa->next) {
- writestruct(wd, DATA, ScrArea, 1, sa);
-
- write_area_regions(wd, sa);
- }
+ write_area_map(wd, AREAMAP_FROM_SCREEN(sc));
}
static void write_bone(WriteData *wd, Bone *bone)