Fix T40108: Copying materials leaves a shared Action datablock in nested
authorLukas Tönne <lukas.toenne@gmail.com>
Fri, 9 May 2014 12:59:14 +0000 (14:59 +0200)
committerLukas Tönne <lukas.toenne@gmail.com>
Fri, 9 May 2014 13:02:21 +0000 (15:02 +0200)
bNodeTree blocks.

This was broken by rB6e99fb0 (own commit). I expected the `do_action`
argument to be of no importance in this case due to node trees using
material animation, but this is not the case.

Anyway, this patch adds back a do_action to the BKE_libblock_copy_nolib
function as well to restore the previous behavior.

source/blender/blenkernel/BKE_library.h
source/blender/blenkernel/intern/library.c
source/blender/blenkernel/intern/material.c
source/blender/blenkernel/intern/node.c

index 44a9885cd87912116d4d8c0a271ecd3ea0909f18..55c71ff49cf646c2d316edee403a62b6e5b3d0e3 100644 (file)
@@ -49,7 +49,7 @@ struct PropertyRNA;
 
 void *BKE_libblock_alloc(struct Main *bmain, short type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 void *BKE_libblock_copy_ex(struct Main *bmain, struct ID *id) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
-void *BKE_libblock_copy_nolib(struct ID *id) ATTR_NONNULL();
+void *BKE_libblock_copy_nolib(struct ID *id, const bool do_action) ATTR_NONNULL();
 void *BKE_libblock_copy(struct ID *id) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 void  BKE_libblock_copy_data(struct ID *id, const struct ID *id_from, const bool do_action);
 
index 6306971a61272913553ed4f6e3f46a715820287c..fe2d14815812a341e53b4de82d285a69a8cf9ca6 100644 (file)
@@ -806,7 +806,7 @@ void *BKE_libblock_copy_ex(Main *bmain, ID *id)
        return idn;
 }
 
-void *BKE_libblock_copy_nolib(ID *id)
+void *BKE_libblock_copy_nolib(ID *id, const bool do_action)
 {
        ID *idn;
        size_t idn_len;
@@ -827,7 +827,7 @@ void *BKE_libblock_copy_nolib(ID *id)
        id->newid = idn;
        idn->flag |= LIB_NEW;
 
-       BKE_libblock_copy_data(idn, id, false);
+       BKE_libblock_copy_data(idn, id, do_action);
 
        return idn;
 }
index c8ad920b2c3c0b0bc27114ad0697bf8a4405778f..de3aea9267f17b1c8778085d502f4958dad87498 100644 (file)
@@ -257,7 +257,7 @@ Material *localize_material(Material *ma)
        Material *man;
        int a;
        
-       man = BKE_libblock_copy_nolib(&ma->id);
+       man = BKE_libblock_copy_nolib(&ma->id, false);
 
        /* no increment for texture ID users, in previewrender.c it prevents decrement */
        for (a = 0; a < MAX_MTEX; a++) {
index 3e64868e447b9a79e24f37ee30a204b7d1442a6d..ce1e34de0b04e657f52f440d21889fa108d542ca 100644 (file)
@@ -1123,7 +1123,7 @@ static bNodeTree *ntreeCopyTree_internal(bNodeTree *ntree, Main *bmain, bool do_
                newtree = BKE_libblock_copy(&ntree->id);
        }
        else {
-               newtree = BKE_libblock_copy_nolib(&ntree->id);
+               newtree = BKE_libblock_copy_nolib(&ntree->id, true);
                newtree->id.lib = NULL; /* same as owning datablock id.lib */
        }