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:
authorPhilipp Oeser <info@graphics-engineer.com>2020-05-13 18:30:39 +0300
committerPhilipp Oeser <info@graphics-engineer.com>2020-05-15 14:32:15 +0300
commit0a32f6c8686c6a14a052f5b254655b3b69a581e3 (patch)
tree2fa3aa373b80ece8d8c0e2979e1eabf59f8f7b65
parent0ae64a9945db9f3d00ba7ef3780e25e16fabf664 (diff)
Fix T76710: objects get lost in linked/overridden collections
Right now: - drag-drop in the Outliner prevents dropping inside linked collections - drag-drop in the Outliner allows dropping inside overridden collections (should not be the case) - `Object Properties` > `Collections` panel allows to add to overridden collection (should not be the case) - `Object Properties` > `Collections` panel filters out non-local collections (so adding to linked collections is forbidden) - `bpy collection.objects.link()` allows to add to linked collections (should not be the case) - `bpy collection.objects.link()` allows to add to overridden collections (should not be the case) While this might be supported in the future for overriden collections, these cases should not be allowed atm. since objects get lost on file reload. Note: for the case of the `Object Properties` > `Collections` panel, this could be improved further to filter out overridden collections as well. Reviewers: mont29, brecht Subscribers:
-rw-r--r--source/blender/editors/object/object_collection.c16
-rw-r--r--source/blender/editors/space_outliner/outliner_dragdrop.c4
-rw-r--r--source/blender/makesrna/intern/rna_collection.c17
3 files changed, 37 insertions, 0 deletions
diff --git a/source/blender/editors/object/object_collection.c b/source/blender/editors/object/object_collection.c
index 7554c4efeda..0822697d265 100644
--- a/source/blender/editors/object/object_collection.c
+++ b/source/blender/editors/object/object_collection.c
@@ -481,6 +481,22 @@ static int collection_link_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
+ /* Currently this should not be allowed (might be supported in the future though...). */
+ if (ID_IS_OVERRIDE_LIBRARY(&collection->id)) {
+ BKE_report(op->reports,
+ RPT_ERROR,
+ "Could not add the collection because it is overridden.");
+ return OPERATOR_CANCELLED;
+ }
+ /* Linked collections are already checked for by using RNA_collection_local_itemf
+ * but operator can be called without invoke */
+ if (ID_IS_LINKED(&collection->id)) {
+ BKE_report(op->reports,
+ RPT_ERROR,
+ "Could not add the collection because it is linked.");
+ return OPERATOR_CANCELLED;
+ }
+
/* Adding object to collection which is used as dupli-collection for self is bad idea.
*
* It is also bad idea to add object to collection which is in collection which
diff --git a/source/blender/editors/space_outliner/outliner_dragdrop.c b/source/blender/editors/space_outliner/outliner_dragdrop.c
index 44e5347dcad..c2c9f3a5bfb 100644
--- a/source/blender/editors/space_outliner/outliner_dragdrop.c
+++ b/source/blender/editors/space_outliner/outliner_dragdrop.c
@@ -675,6 +675,10 @@ static bool collection_drop_init(bContext *C,
if (ID_IS_LINKED(to_collection)) {
return false;
}
+ /* Currently this should not be allowed (might be supported in the future though...). */
+ if (ID_IS_OVERRIDE_LIBRARY(to_collection)) {
+ return false;
+ }
/* Get drag datablocks. */
if (drag->type != WM_DRAG_ID) {
diff --git a/source/blender/makesrna/intern/rna_collection.c b/source/blender/makesrna/intern/rna_collection.c
index 709be0cf842..fe64ead3f89 100644
--- a/source/blender/makesrna/intern/rna_collection.c
+++ b/source/blender/makesrna/intern/rna_collection.c
@@ -82,6 +82,23 @@ static void rna_Collection_objects_link(Collection *collection,
ReportList *reports,
Object *object)
{
+ /* Currently this should not be allowed (might be supported in the future though...). */
+ if (ID_IS_OVERRIDE_LIBRARY(&collection->id)) {
+ BKE_reportf(reports,
+ RPT_ERROR,
+ "Could not link the object '%s' because the collection '%s' is overridden.",
+ object->id.name + 2,
+ collection->id.name + 2);
+ return;
+ }
+ if (ID_IS_LINKED(&collection->id)) {
+ BKE_reportf(reports,
+ RPT_ERROR,
+ "Could not link the object '%s' because the collection '%s' is linked.",
+ object->id.name + 2,
+ collection->id.name + 2);
+ return;
+ }
if (!BKE_collection_object_add(bmain, collection, object)) {
BKE_reportf(reports,
RPT_ERROR,