Merge branch 'master' into blender2.8
authorSergey Sharybin <sergey.vfx@gmail.com>
Wed, 6 Dec 2017 13:06:49 +0000 (14:06 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 6 Dec 2017 13:06:49 +0000 (14:06 +0100)
source/blender/blenkernel/BKE_library.h
source/blender/blenkernel/intern/library.c

index 468aab9bdf9eeac3768420db5bead5106a531818..0abf99415c75dc861cc2584bfd61d50c980648b9 100644 (file)
@@ -77,6 +77,7 @@ enum {
        LIB_ID_COPY_CACHES             = 1 << 18,  /* Copy runtime data caches. */
        /* XXX TODO Do we want to keep that? would rather try to get rid of it... */
        LIB_ID_COPY_ACTIONS            = 1 << 19,  /* EXCEPTION! Deep-copy actions used by animdata of copied ID. */
+       LIB_ID_COPY_KEEP_LIB           = 1 << 20,  /* Keep the library pointer when copying datablock outside of bmain. */
 };
 
 void BKE_libblock_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, const int flag);
index 0b4ec679f062241995036de7b895136dfd365d3e..0ef1fe52994993467526d7ec63ed9ca70161138e 100644 (file)
@@ -675,8 +675,12 @@ bool BKE_id_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int flag, con
        /* Do not make new copy local in case we are copying outside of main...
         * XXX TODO: is this behavior OK, or should we need own flag to control that? */
        if ((flag & LIB_ID_CREATE_NO_MAIN) == 0) {
+               BLI_assert((flag & LIB_ID_COPY_KEEP_LIB) == 0);
                BKE_id_copy_ensure_local(bmain, id, *r_newid);
        }
+       else {
+               (*r_newid)->lib = id->lib;
+       }
 
        return true;
 }