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:
-rw-r--r--source/blender/blenkernel/intern/collection.c18
-rw-r--r--tests/python/view_layer/CMakeLists.txt3
-rw-r--r--tests/python/view_layer/test_collection_rename_a.py (renamed from tests/python/view_layer/test_collection_rename.py)0
-rw-r--r--tests/python/view_layer/test_collection_rename_b.py58
4 files changed, 78 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index d0f89eb46e5..edd29f793ec 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -315,6 +315,15 @@ void BKE_collection_rename(const Scene *scene, SceneCollection *sc, const char *
}
/**
+ * Make sure the collection name is still unique within its siblings.
+ */
+static void collection_name_check(const ID *owner_id, SceneCollection *sc)
+{
+ /* It's a bit of a hack, we simply try to make sure the collection name is valid. */
+ collection_rename(owner_id, sc, sc->name);
+}
+
+/**
* Free (or release) any data used by the master collection (does not free the master collection itself).
* Used only to clear the entire scene or group data since it's not doing re-syncing of the LayerCollection tree
*/
@@ -589,6 +598,9 @@ bool BKE_collection_move_above(const ID *owner_id, SceneCollection *sc_dst, Scen
BKE_layer_collection_resync(owner_id, sc_src_parent);
BKE_layer_collection_resync(owner_id, sc_dst_parent);
+ /* Keep names unique. */
+ collection_name_check(owner_id, sc_src);
+
return true;
}
@@ -628,6 +640,9 @@ bool BKE_collection_move_below(const ID *owner_id, SceneCollection *sc_dst, Scen
BKE_layer_collection_resync(owner_id, sc_src_parent);
BKE_layer_collection_resync(owner_id, sc_dst_parent);
+ /* Keep names unique. */
+ collection_name_check(owner_id, sc_src);
+
return true;
}
@@ -663,6 +678,9 @@ bool BKE_collection_move_into(const ID *owner_id, SceneCollection *sc_dst, Scene
BKE_layer_collection_resync(owner_id, sc_src_parent);
BKE_layer_collection_resync(owner_id, sc_dst);
+ /* Keep names unique. */
+ collection_name_check(owner_id, sc_src);
+
return true;
}
diff --git a/tests/python/view_layer/CMakeLists.txt b/tests/python/view_layer/CMakeLists.txt
index 69b02416487..e308e2e0952 100644
--- a/tests/python/view_layer/CMakeLists.txt
+++ b/tests/python/view_layer/CMakeLists.txt
@@ -62,7 +62,8 @@ endmacro()
VIEW_LAYER_TEST(active_collection)
VIEW_LAYER_TEST(background_set)
-VIEW_LAYER_TEST(collection_rename)
+VIEW_LAYER_TEST(collection_rename_a)
+VIEW_LAYER_TEST(collection_rename_b)
VIEW_LAYER_TEST(evaluation_render_settings_a)
VIEW_LAYER_TEST(evaluation_render_settings_b)
VIEW_LAYER_TEST(evaluation_render_settings_c)
diff --git a/tests/python/view_layer/test_collection_rename.py b/tests/python/view_layer/test_collection_rename_a.py
index ea156d7346f..ea156d7346f 100644
--- a/tests/python/view_layer/test_collection_rename.py
+++ b/tests/python/view_layer/test_collection_rename_a.py
diff --git a/tests/python/view_layer/test_collection_rename_b.py b/tests/python/view_layer/test_collection_rename_b.py
new file mode 100644
index 00000000000..3787066e1b9
--- /dev/null
+++ b/tests/python/view_layer/test_collection_rename_b.py
@@ -0,0 +1,58 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def setup_collections(self):
+ import bpy
+ scene = bpy.context.scene
+
+ master = scene.master_collection
+ one = master.collections[0]
+ two = master.collections.new()
+ sub = two.collections.new(one.name)
+
+ self.assertEqual(one.name, sub.name)
+
+ lookup = {
+ 'master': master,
+ 'one': one,
+ 'two': two,
+ 'sub': sub,
+ }
+ return lookup
+
+ def test_move_above(self):
+ collections = self.setup_collections()
+ collections['sub'].move_above(collections['one'])
+ self.assertNotEqual(collections['one'].name, collections['sub'].name)
+
+ def test_move_below(self):
+ collections = self.setup_collections()
+ collections['sub'].move_below(collections['one'])
+ self.assertNotEqual(collections['one'].name, collections['sub'].name)
+
+ def test_move_into(self):
+ collections = self.setup_collections()
+ collections['sub'].move_into(collections['master'])
+ self.assertNotEqual(collections['one'].name, collections['sub'].name)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()