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:
authorDalai Felinto <dfelinto@gmail.com>2018-02-09 14:04:00 +0300
committerDalai Felinto <dfelinto@gmail.com>2018-02-09 14:05:27 +0300
commit25074be697cb5726328aa5d064a60788c1da6aeb (patch)
treee75abc47e1d5c0db7ab4fe4db1d5989f7015c101 /source/blender
parent37e53ca5f3496f9a09f46afd1e4ff2f1d2d153df (diff)
Fix collection syncing when creating new collections from the outliner
We were not passing a scene collection parent to the BKE_collection_add function, which in turn made syncing not work. Right now we: * Explicitly pass the master collection in this case * Fallback to the master collection in other cases With unittest.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/collection.c4
-rw-r--r--source/blender/blenkernel/intern/layer.c1
-rw-r--r--source/blender/editors/space_outliner/outliner_collections.c3
3 files changed, 7 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index 729be02bfc7..69168c4dd3d 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -111,6 +111,10 @@ static SceneCollection *collection_add(ID *owner_id, SceneCollection *sc_parent,
*/
SceneCollection *BKE_collection_add(ID *owner_id, SceneCollection *sc_parent, const int type, const char *name_custom)
{
+ if (sc_parent == NULL) {
+ sc_parent = BKE_collection_master(owner_id);
+ }
+
SceneCollection *scene_collection = collection_add(owner_id, sc_parent, type, name_custom);
BKE_layer_sync_new_scene_collection(owner_id, sc_parent, scene_collection);
return scene_collection;
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 9807c6e4f10..cb7b72bdabd 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -375,6 +375,7 @@ static void layer_collection_sync_flags(
static void layer_collections_sync_flags(ListBase *layer_collections_dst, const ListBase *layer_collections_src)
{
+ BLI_assert(BLI_listbase_count(layer_collections_dst) == BLI_listbase_count(layer_collections_src));
LayerCollection *layer_collection_dst = (LayerCollection *)layer_collections_dst->first;
const LayerCollection *layer_collection_src = (const LayerCollection *)layer_collections_src->first;
while (layer_collection_dst != NULL) {
diff --git a/source/blender/editors/space_outliner/outliner_collections.c b/source/blender/editors/space_outliner/outliner_collections.c
index be4c8f62085..3d5f12a94fd 100644
--- a/source/blender/editors/space_outliner/outliner_collections.c
+++ b/source/blender/editors/space_outliner/outliner_collections.c
@@ -342,7 +342,8 @@ static int collection_new_exec(bContext *C, wmOperator *UNUSED(op))
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
- SceneCollection *scene_collection = BKE_collection_add(&scene->id, NULL, COLLECTION_TYPE_NONE, NULL);
+ SceneCollection *scene_collection_parent = BKE_collection_master(&scene->id);
+ SceneCollection *scene_collection = BKE_collection_add(&scene->id, scene_collection_parent, COLLECTION_TYPE_NONE, NULL);
BKE_collection_link(view_layer, scene_collection);
DEG_relations_tag_update(bmain);