[Bf-blender-cvs] [e6128bd177c] temp-dynamic-overrides: Tag depsgraph COW for update when changing dynamic overrides

Dalai Felinto noreply at git.blender.org
Fri May 25 20:42:07 CEST 2018


Commit: e6128bd177ca144f2256873de85603cd86bcf061
Author: Dalai Felinto
Date:   Fri May 25 20:33:48 2018 +0200
Branches: temp-dynamic-overrides
https://developer.blender.org/rBe6128bd177ca144f2256873de85603cd86bcf061

Tag depsgraph COW for update when changing dynamic overrides

===================================================================

M	source/blender/editors/scene/scene_edit.c
M	source/blender/makesrna/intern/rna_layer.c

===================================================================

diff --git a/source/blender/editors/scene/scene_edit.c b/source/blender/editors/scene/scene_edit.c
index 03472807d38..b1d8e265859 100644
--- a/source/blender/editors/scene/scene_edit.c
+++ b/source/blender/editors/scene/scene_edit.c
@@ -293,8 +293,10 @@ static void SCENE_OT_delete(wmOperatorType *ot)
 
 static int view_layer_override_set_add_exec(bContext *C, wmOperator *UNUSED(op))
 {
+	Scene *scene = CTX_data_scene(C);
 	BKE_view_layer_override_set_add(CTX_data_view_layer(C), "New Override Set");
-	WM_event_add_notifier(C, NC_SCENE | ND_DYN_OVERRIDES, CTX_data_scene(C));
+	DEG_id_tag_update(&scene->id, DEG_TAG_COPY_ON_WRITE);
+	WM_event_add_notifier(C, NC_SCENE | ND_DYN_OVERRIDES, scene);
 	return OPERATOR_FINISHED;
 }
 
@@ -314,6 +316,7 @@ static void SCENE_OT_view_layer_override_set_add(wmOperatorType *ot)
 
 static int view_layer_override_set_remove_exec(bContext *C, wmOperator *op)
 {
+	Scene *scene = CTX_data_scene(C);
 	ViewLayer *view_layer = CTX_data_view_layer(C);
 	OverrideSet *override_set = BLI_findlink(&view_layer->override_sets, view_layer->active_override_set);
 
@@ -323,8 +326,9 @@ static int view_layer_override_set_remove_exec(bContext *C, wmOperator *op)
 	}
 
 	BKE_view_layer_override_set_remove(view_layer, override_set);
-	WM_event_add_notifier(C, NC_SCENE | ND_DYN_OVERRIDES, CTX_data_scene(C));
 
+	DEG_id_tag_update(&scene->id, DEG_TAG_COPY_ON_WRITE);
+	WM_event_add_notifier(C, NC_SCENE | ND_DYN_OVERRIDES, scene);
 	return OPERATOR_FINISHED;
 }
 
@@ -379,6 +383,7 @@ static int view_layer_override_set_collection_link_exec(bContext *C, wmOperator
 	OverrideSet *override_set = BLI_findlink(&view_layer->override_sets, view_layer->active_override_set);
 
 	if (BKE_view_layer_override_set_collection_link(override_set, collection)) {
+		DEG_id_tag_update(&scene->id, DEG_TAG_COPY_ON_WRITE);
 		WM_event_add_notifier(C, NC_SCENE | ND_DYN_OVERRIDES, scene);
 		return OPERATOR_FINISHED;
 	}
@@ -553,14 +558,16 @@ static void SCENE_OT_override_set_collection_link(wmOperatorType *ot)
 
 static int view_layer_override_set_collection_unlink_exec(bContext *C, wmOperator *UNUSED(op))
 {
+	Scene *scene = CTX_data_scene(C);
 	ViewLayer *view_layer = CTX_data_view_layer(C);
 	OverrideSet *override_set = BLI_findlink(&view_layer->override_sets, view_layer->active_override_set);
 	LinkData *link = BLI_findlink(&override_set->affected_collections, override_set->active_affected_collection);
 	Collection *collection = link->data;
 
 	BKE_view_layer_override_set_collection_unlink(override_set, collection);
-	WM_event_add_notifier(C, NC_SCENE | ND_DYN_OVERRIDES, CTX_data_scene(C));
 
+	DEG_id_tag_update(&scene->id, DEG_TAG_COPY_ON_WRITE);
+	WM_event_add_notifier(C, NC_SCENE | ND_DYN_OVERRIDES, scene);
 	return OPERATOR_FINISHED;
 }
 
@@ -611,6 +618,7 @@ static int view_layer_override_add_exec(bContext *C, wmOperator *op)
 	ID *id = override_property_data.ptr.id.data;
 	BLI_assert(id != NULL);
 
+	Scene *scene = CTX_data_scene(C);
 	ViewLayer *view_layer = CTX_data_view_layer(C);
 	OverrideSet *override_set;
 
@@ -637,7 +645,8 @@ static int view_layer_override_add_exec(bContext *C, wmOperator *op)
 	                                     override_property_data.prop,
 	                                     override_property_data.index);
 
-	WM_event_add_notifier(C, NC_SCENE | ND_DYN_OVERRIDES, CTX_data_scene(C));
+	DEG_id_tag_update(&scene->id, DEG_TAG_COPY_ON_WRITE);
+	WM_event_add_notifier(C, NC_SCENE | ND_DYN_OVERRIDES, scene);
 	return OPERATOR_FINISHED;
 }
 
@@ -731,6 +740,7 @@ static void SCENE_OT_view_layer_override_add(wmOperatorType *ot)
 
 static int view_layer_override_remove_exec(bContext *C, wmOperator *op)
 {
+	Scene *scene = CTX_data_scene(C);
 	ViewLayer *view_layer = CTX_data_view_layer(C);
 	OverrideSet *override_set = BLI_findlink(&view_layer->override_sets, view_layer->active_override_set);
 
@@ -767,6 +777,9 @@ static int view_layer_override_remove_exec(bContext *C, wmOperator *op)
 	}
 
 	BKE_view_layer_override_property_remove(override_set, dyn_prop);
+
+	DEG_id_tag_update(&scene->id, DEG_TAG_COPY_ON_WRITE);
+	WM_event_add_notifier(C, NC_SCENE | ND_DYN_OVERRIDES, scene);
 	return OPERATOR_FINISHED;
 }
 
diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c
index d66e793a0ef..185184b72dd 100644
--- a/source/blender/makesrna/intern/rna_layer.c
+++ b/source/blender/makesrna/intern/rna_layer.c
@@ -244,6 +244,7 @@ static void rna_OverriddenCollection_link(
 {
 	if (BKE_view_layer_override_set_collection_link(override_set, collection)) {
 		Scene *scene = (Scene *)id;
+		DEG_id_tag_update(&scene->id, DEG_TAG_COPY_ON_WRITE);
 		WM_main_add_notifier(NC_SCENE | ND_DYN_OVERRIDES, scene);
 	}
 	else {
@@ -267,6 +268,7 @@ static void rna_OverriddenCollection_unlink(
 	}
 	else {
 		Scene *scene = (Scene *)id;
+		DEG_id_tag_update(&scene->id, DEG_TAG_COPY_ON_WRITE);
 		WM_main_add_notifier(NC_SCENE | ND_DYN_OVERRIDES, scene);
 	}
 }
@@ -334,6 +336,7 @@ static OverrideSet *rna_OverrideSet_new(ID *id, ViewLayer *view_layer, const cha
 {
 	Scene *scene = (Scene *)id;
 	OverrideSet *override_set = BKE_view_layer_override_set_add(view_layer, name);
+	DEG_id_tag_update(&scene->id, DEG_TAG_COPY_ON_WRITE);
 	WM_main_add_notifier(NC_SCENE | ND_DYN_OVERRIDES, scene);
 	return override_set;
 }
@@ -354,6 +357,7 @@ static void rna_OverrideSet_remove(
 	}
 
 	RNA_POINTER_INVALIDATE(ptr);
+	DEG_id_tag_update(&scene->id, DEG_TAG_COPY_ON_WRITE);
 	WM_main_add_notifier(NC_SCENE | ND_DYN_OVERRIDES, scene);
 }



More information about the Bf-blender-cvs mailing list