Merge branch 'master' into blender2.8
authorBastien Montagne <montagne29@wanadoo.fr>
Wed, 4 Apr 2018 10:00:57 +0000 (12:00 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Wed, 4 Apr 2018 10:00:57 +0000 (12:00 +0200)
Conflicts:
source/blender/blenloader/intern/readfile.c

source/blender/blenloader/intern/readfile.c

index 1f37eaf390be213f0bf6d0094b61f027c975e958..4c212ecca01574c048f80dcea485121fb4a1ef83 100644 (file)
@@ -2287,6 +2287,10 @@ static void direct_link_id(FileData *fd, ID *id)
        }
        id->py_instance = NULL;
 
+       /* That way datablock reading not going through main read_libblock() function are still in a clear tag state.
+        * (glowering at certain nodetree fake datablock here...). */
+       id->tag = 0;
+
        /* Link direct data of overrides. */
        if (id->override_static) {
                id->override_static = newdataadr(fd, id->override_static);
@@ -8541,7 +8545,6 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, const short
        if (!id)
                return blo_nextbhead(fd, bhead);
        
-       id->tag = tag | LIB_TAG_NEED_LINK;
        id->lib = main->curlib;
        id->us = ID_FAKE_USERS(id);
        id->icon_id = 0;
@@ -8551,12 +8554,12 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, const short
        
        /* this case cannot be direct_linked: it's just the ID part */
        if (bhead->code == ID_ID) {
+               /* That way, we know which datablock needs do_versions (required currently for linking). */
+               id->tag = tag | LIB_TAG_NEED_LINK | LIB_TAG_NEW;
+
                return blo_nextbhead(fd, bhead);
        }
 
-       /* That way, we know which datablock needs do_versions (required currently for linking). */
-       id->tag |= LIB_TAG_NEW;
-
        /* need a name for the mallocN, just for debugging and sane prints on leaks */
        allocname = dataname(GS(id->name));
        
@@ -8565,7 +8568,11 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, const short
        
        /* init pointers direct data */
        direct_link_id(fd, id);
-       
+
+       /* That way, we know which datablock needs do_versions (required currently for linking). */
+       /* Note: doing this after driect_link_id(), which resets that field. */
+       id->tag = tag | LIB_TAG_NEED_LINK | LIB_TAG_NEW;
+
        switch (GS(id->name)) {
                case ID_WM:
                        direct_link_windowmanager(fd, (wmWindowManager *)id);