Commit: d19ebcbe07be890b1ac38807fab5106357e8a359
Author: Julian Eisel
Date:   Sat Dec 31 15:42:42 2016 +0100
Branches: workspaces
https://developer.blender.org/rBd19ebcbe07be890b1ac38807fab5106357e8a359

Use new after lib-linking versioning

===================================================================

M       source/blender/blenloader/intern/readfile.c
M       source/blender/blenloader/intern/readfile.h
M       source/blender/blenloader/intern/versioning_270.c

===================================================================

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 2538106..73810b3 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6226,38 +6226,6 @@ static void direct_link_windowmanager(FileData *fd, 
wmWindowManager *wm)
        wm->is_interface_locked = 0;
 }
 
-/**
- * \brief Window data compatibility conversion for 2.8
- *
- *  *  Active screen isn't stored directly in window anymore, but in the 
active workspace.
- *     We already created a new workspace for each screen in 
blo_do_versions_270, here we need
- *     to find and activate the workspace that contains the active screen of 
the old file.
- *  *  Active scene isn't stored in screen anymore, but in window.
- *
- * \return if conversion was done.
- */
-static bool lib_link_window_280_conversion(FileData *fd, Main *main, wmWindow 
*win)
-{
-       if (MAIN_VERSION_ATLEAST(main, 278, 5)) {
-               return false;
-       }
-
-       if (win->screen) {
-               win->screen = newlibadr(fd, NULL, win->screen);
-               win->workspace = BLI_findstring(&main->workspaces, 
win->screen->id.name + 2,
-                                               offsetof(ID, name) + 2);
-               /* Deprecated from now on! */
-               win->screen = NULL;
-       }
-
-       {
-               const bScreen *screen = 
BKE_workspace_active_screen_get(win->workspace);
-               win->scene = newlibadr(fd, NULL, screen->scene);
-       }
-
-       return true;
-}
-
 static void lib_link_windowmanager(FileData *fd, Main *main)
 {
        wmWindowManager *wm;
@@ -6266,10 +6234,9 @@ static void lib_link_windowmanager(FileData *fd, Main 
*main)
        for (wm = main->wm.first; wm; wm = wm->id.next) {
                if (wm->id.tag & LIB_TAG_NEED_LINK) {
                        for (win = wm->windows.first; win; win = win->next) {
-                               if (!lib_link_window_280_conversion(fd, main, 
win)) {
-                                       win->scene = newlibadr(fd, wm->id.lib, 
win->scene);
-                                       win->workspace = newlibadr(fd, 
wm->id.lib, win->workspace);
-                               }
+                               win->screen = newlibadr(fd, NULL, win->screen);
+                               win->scene = newlibadr(fd, wm->id.lib, 
win->scene);
+                               win->workspace = newlibadr(fd, wm->id.lib, 
win->workspace);
                        }
 
                        wm->id.tag &= ~LIB_TAG_NEED_LINK;
@@ -6357,8 +6324,8 @@ static void lib_link_screen(FileData *fd, Main *main)
                if (sc->id.tag & LIB_TAG_NEED_LINK) {
                        id_us_ensure_real(&sc->id);
 
-                       /* deprecated now */
-                       sc->scene = NULL;
+                       /* deprecated, but needed for versioning (will be 
NULL'ed then) */
+                       sc->scene = newlibadr(fd, sc->id.lib, sc->scene);
 
                        sc->animtimer = NULL; /* saved in rare cases */
                        sc->scrubbing = false;
@@ -8467,9 +8434,9 @@ static void do_versions(FileData *fd, Library *lib, Main 
*main)
        /* don't forget to set version number in BKE_blender_version.h! */
 }
 
-static void do_versions_after_linking(Main *main)
+static void do_versions_after_linking(FileData *fd, Main *main)
 {
-       UNUSED_VARS(main);
+       blo_do_versions_after_linking_270(fd, main);
 //     printf("%s for %s (%s), %d.%d\n", __func__, main->curlib ? 
main->curlib->name : main->name,
 //            main->curlib ? "LIB" : "MAIN", main->versionfile, 
main->subversionfile);
 }
@@ -8681,7 +8648,7 @@ BlendFileData *blo_read_file_internal(FileData *fd, const 
char *filepath)
                blo_split_main(&mainlist, bfd->main);
                for (Main *mainvar = mainlist.first; mainvar; mainvar = 
mainvar->next) {
                        BLI_assert(mainvar->versionfile != 0);
-                       do_versions_after_linking(mainvar);
+                       do_versions_after_linking(fd, mainvar);
                }
                blo_join_main(&mainlist);
        }
@@ -10291,7 +10258,7 @@ static void library_link_end(Main *mainl, FileData 
**fd, const short flag, Scene
                /* We need to split out IDs already existing, or they will go 
again through do_versions - bad, very bad! */
                split_main_newid(mainvar, &main_newid);
 
-               do_versions_after_linking(&main_newid);
+               do_versions_after_linking(*fd, &main_newid);
 
                add_main_to_main(mainvar, &main_newid);
        }
diff --git a/source/blender/blenloader/intern/readfile.h 
b/source/blender/blenloader/intern/readfile.h
index 7719aaa..8d1471d 100644
--- a/source/blender/blenloader/intern/readfile.h
+++ b/source/blender/blenloader/intern/readfile.h
@@ -169,6 +169,7 @@ void blo_do_versions_pre250(struct FileData *fd, struct 
Library *lib, struct Mai
 void blo_do_versions_250(struct FileData *fd, struct Library *lib, struct Main 
*main);
 void blo_do_versions_260(struct FileData *fd, struct Library *lib, struct Main 
*main);
 void blo_do_versions_270(struct FileData *fd, struct Library *lib, struct Main 
*main);
+void blo_do_versions_after_linking_270(struct FileData *fd, struct Main *main);
 
 #endif
 
diff --git a/source/blender/blenloader/intern/versioning_270.c 
b/source/blender/blenloader/intern/versioning_270.c
index c47bfff..bf9dfbf 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -196,6 +196,51 @@ static void do_version_bones_super_bbone(ListBase *lb)
        }
 }
 
+/**
+ * \brief Before lib-link versioning for new workspace design.
+ *
+ * Adds a workspace for each screen of the old file and adds the needed 
workspace-layout to wrap the screen.
+ * Rest of the conversion is done in #do_version_workspaces_after_lib_link.
+ */
+static void do_version_workspaces_before_lib_link(Main *main)
+{
+       BLI_assert(BLI_listbase_is_empty(&main->workspaces));
+
+       for (bScreen *screen = main->screen.first; screen; screen = 
screen->id.next) {
+               WorkSpace *ws = BKE_workspace_add(main, screen->id.name + 2);
+               WorkSpaceLayout *layout = BKE_workspace_layout_add(ws, screen);
+
+               BKE_workspace_active_layout_set(ws, layout);
+
+               /* For compatibility, the workspace should be activated that 
represents the active
+                * screen of the old file. This is done in 
blo_do_versions_after_linking_270. */
+       }
+}
+
+/**
+ * \brief After lib-link versioning for new workspace design.
+ *
+ *  *  Active screen isn't stored directly in window anymore, but in the 
active workspace.
+ *     We already created a new workspace for each screen in 
#do_version_workspaces_before_lib_link,
+ *     here we need to find and activate the workspace that contains the 
active screen of the old file.
+ *  *  Active scene isn't stored in screen anymore, but in window.
+ */
+static void do_version_workspaces_after_lib_link(Main *main)
+{
+       for (wmWindowManager *wm = main->wm.first; wm; wm = wm->id.next) {
+               for (wmWindow *win = wm->windows.first; win; win = win->next) {
+                       bScreen *screen = win->screen;
+
+                       win->workspace = BLI_findstring(&main->workspaces, 
screen->id.name + 2, offsetof(ID, name) + 2);
+                       win->scene = screen->scene;
+
+                       /* Deprecated from now on! */
+                       win->screen = NULL;
+                       screen->scene = NULL;
+               }
+       }
+}
+
 void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
 {
        if (!MAIN_VERSION_ATLEAST(main, 270, 0)) {
@@ -1520,19 +1565,16 @@ void blo_do_versions_270(FileData *fd, Library 
*UNUSED(lib), Main *main)
        if (!MAIN_VERSION_ATLEAST(main, 278, 5)) {
                /* New workspace design */
                if (!DNA_struct_find(fd->filesdna, "WorkSpace")) {
-                       BLI_assert(BLI_listbase_is_empty(&main->workspaces));
-
-                       /* Add a workspace for each screen of the old file. */
-                       for (bScreen *screen = main->screen.first; screen; 
screen = screen->id.next) {
-                               WorkSpace *ws = BKE_workspace_add(main, 
screen->id.name + 2);
-                               WorkSpaceLayout *layout = 
BKE_workspace_layout_add(ws, screen);
-
-                               BKE_workspace_active_layout_set(ws, layout);
+                       do_version_workspaces_before_lib_link(main);
+               }
+       }
+}
 
-                               /* For compatibility, the workspace should be 
activated that represents the active
-                                * screen of the old file. We can't do this 
here though since wmWindow.screen
-                                * pointer isn't remapped yet. Done in 
lib_link_windowmanager instead */
-                       }
+void blo_do_versions_after_linking_270(FileData *fd, Main *main)
+{
+       if (!MAIN_VERSION_ATLEAST(main, 278, 5)) {
+               if (!DNA_struct_find(fd->filesdna, "WorkSpace")) {
+                       do_version_workspaces_after_lib_link(main);
                }
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to