[Bf-blender-cvs] [88bb27adc6] temp-depsgraph-layers: Adding missing DAG_relations_tag_update
Dalai Felinto
noreply at git.blender.org
Mon Mar 20 19:48:15 CET 2017
Commit: 88bb27adc66c5ca2d229fd4ffb888577d2327219
Author: Dalai Felinto
Date: Fri Mar 17 18:32:01 2017 +0100
Branches: temp-depsgraph-layers
https://developer.blender.org/rB88bb27adc66c5ca2d229fd4ffb888577d2327219
Adding missing DAG_relations_tag_update
===================================================================
M source/blender/editors/render/render_shading.c
M source/blender/editors/space_outliner/outliner_collections.c
M source/blender/editors/space_outliner/outliner_tools.c
M source/blender/makesrna/intern/rna_scene.c
M tests/python/render_layer/test_evaluation_visibility_b.py
===================================================================
diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c
index 490182b17e..c2aaba4dfd 100644
--- a/source/blender/editors/render/render_shading.c
+++ b/source/blender/editors/render/render_shading.c
@@ -631,6 +631,7 @@ static int render_layer_add_exec(bContext *C, wmOperator *UNUSED(op))
scene->active_layer = BLI_listbase_count(&scene->render_layers) - 1;
DAG_id_tag_update(&scene->id, 0);
+ DAG_relations_tag_update(CTX_data_main(C));
WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_outliner/outliner_collections.c b/source/blender/editors/space_outliner/outliner_collections.c
index c5cfd47486..e9c49ffdb1 100644
--- a/source/blender/editors/space_outliner/outliner_collections.c
+++ b/source/blender/editors/space_outliner/outliner_collections.c
@@ -26,6 +26,7 @@
#include "BKE_context.h"
#include "BKE_collection.h"
+#include "BKE_depsgraph.h"
#include "BKE_layer.h"
#include "BKE_report.h"
@@ -120,6 +121,7 @@ static int collection_link_exec(bContext *C, wmOperator *op)
BKE_collection_link(sl, sc);
+ DAG_relations_tag_update(CTX_data_main(C));
WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
return OPERATOR_FINISHED;
}
@@ -217,6 +219,7 @@ static int collection_unlink_exec(bContext *C, wmOperator *op)
SceneLayer *sl = CTX_data_scene_layer(C);
BKE_collection_unlink(sl, lc);
+ DAG_relations_tag_update(CTX_data_main(C));
WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
return OPERATOR_FINISHED;
}
@@ -244,6 +247,7 @@ static int collection_new_exec(bContext *C, wmOperator *UNUSED(op))
SceneCollection *sc = BKE_collection_add(scene, NULL, NULL);
BKE_collection_link(sl, sc);
+ DAG_relations_tag_update(CTX_data_main(C));
WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
return OPERATOR_FINISHED;
}
@@ -342,6 +346,7 @@ static int collection_delete_exec(bContext *C, wmOperator *UNUSED(op))
TODO_LAYER_OVERRIDE; /* handle overrides */
outliner_tree_traverse(soops, &soops->tree, 0, TSE_SELECTED, collection_delete_cb, &data);
+ DAG_relations_tag_update(CTX_data_main(C));
WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c
index a2753dac64..34879c0958 100644
--- a/source/blender/editors/space_outliner/outliner_tools.c
+++ b/source/blender/editors/space_outliner/outliner_tools.c
@@ -847,11 +847,13 @@ static void collection_cb(int event, TreeElement *te, TreeStoreElem *UNUSED(tsel
}
else {
BKE_collection_unlink(sl, lc);
+ DAG_relations_tag_update(CTX_data_main(C));
WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
}
}
else if (event == OL_COLLECTION_OP_COLLECTION_DEL) {
if (BKE_collection_remove(scene, sc)) {
+ DAG_relations_tag_update(CTX_data_main(C));
WM_event_add_notifier(C, NC_SCENE | ND_LAYER, scene);
}
else {
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index f7e554bae1..555d715a17 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2283,37 +2283,62 @@ static PointerRNA rna_SceneCollection_objects_get(CollectionPropertyIterator *it
return rna_pointer_inherit_refine(&iter->parent, &RNA_Object, ((LinkData *)internal->link)->data);
}
-static int rna_SceneCollection_move_above(ID *id, SceneCollection *sc_src, SceneCollection *sc_dst)
+static int rna_SceneCollection_move_above(ID *id, SceneCollection *sc_src, Main *bmain, SceneCollection *sc_dst)
{
Scene *scene = (Scene *)id;
- return BKE_collection_move_above(scene, sc_dst, sc_src);
+
+ if (!BKE_collection_move_above(scene, sc_dst, sc_src)) {
+ return 0;
+ }
+
+ DAG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return 1;
}
-static int rna_SceneCollection_move_below(ID *id, SceneCollection *sc_src, SceneCollection *sc_dst)
+static int rna_SceneCollection_move_below(ID *id, SceneCollection *sc_src, Main *bmain, SceneCollection *sc_dst)
{
Scene *scene = (Scene *)id;
- return BKE_collection_move_below(scene, sc_dst, sc_src);
+
+ if (!BKE_collection_move_below(scene, sc_dst, sc_src)) {
+ return 0;
+ }
+
+ DAG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return 1;
}
-static int rna_SceneCollection_move_into(ID *id, SceneCollection *sc_src, SceneCollection *sc_dst)
+static int rna_SceneCollection_move_into(ID *id, SceneCollection *sc_src, Main *bmain, SceneCollection *sc_dst)
{
Scene *scene = (Scene *)id;
- return BKE_collection_move_into(scene, sc_dst, sc_src);
+
+ if (!BKE_collection_move_into(scene, sc_dst, sc_src)) {
+ return 0;
+ }
+
+ DAG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return 1;
}
-static SceneCollection *rna_SceneCollection_new(ID *id, SceneCollection *sc_parent, const char *name)
+static SceneCollection *rna_SceneCollection_new(
+ ID *id, SceneCollection *sc_parent, Main *bmain, const char *name)
{
Scene *scene = (Scene *)id;
SceneCollection *sc = BKE_collection_add(scene, sc_parent, name);
- DAG_id_tag_update(&scene->id, 0);
+ DAG_relations_tag_update(bmain);
WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
return sc;
}
static void rna_SceneCollection_remove(
- ID *id, SceneCollection *sc_parent, ReportList *reports, PointerRNA *sc_ptr)
+ ID *id, SceneCollection *sc_parent, Main *bmain, ReportList *reports, PointerRNA *sc_ptr)
{
Scene *scene = (Scene *)id;
SceneCollection *sc = sc_ptr->data;
@@ -2333,7 +2358,7 @@ static void rna_SceneCollection_remove(
RNA_POINTER_INVALIDATE(sc_ptr);
- DAG_id_tag_update(&scene->id, 0);
+ DAG_relations_tag_update(bmain);
WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
}
@@ -2590,22 +2615,46 @@ static PointerRNA rna_LayerCollection_mode_settings_get(ID *UNUSED(id), LayerCol
return rna_pointer_inherit_refine(&ptr, &RNA_CollectionModeSettings, ces);
}
-static int rna_LayerCollection_move_above(ID *id, LayerCollection *lc_src, LayerCollection *lc_dst)
+static int rna_LayerCollection_move_above(ID *id, LayerCollection *lc_src, Main *bmain, LayerCollection *lc_dst)
{
Scene *scene = (Scene *)id;
- return BKE_layer_collection_move_above(scene, lc_dst, lc_src);
+
+ if (!BKE_layer_collection_move_above(scene, lc_dst, lc_src)) {
+ return 0;
+ }
+
+ DAG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return 1;
}
-static int rna_LayerCollection_move_below(ID *id, LayerCollection *lc_src, LayerCollection *lc_dst)
+static int rna_LayerCollection_move_below(ID *id, LayerCollection *lc_src, Main *bmain, LayerCollection *lc_dst)
{
Scene *scene = (Scene *)id;
- return BKE_layer_collection_move_below(scene, lc_dst, lc_src);
+
+ if (!BKE_layer_collection_move_below(scene, lc_dst, lc_src)) {
+ return 0;
+ }
+
+ DAG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return 1;
}
-static int rna_LayerCollection_move_into(ID *id, LayerCollection *lc_src, LayerCollection *lc_dst)
+static int rna_LayerCollection_move_into(ID *id, LayerCollection *lc_src, Main *bmain, LayerCollection *lc_dst)
{
Scene *scene = (Scene *)id;
- return BKE_layer_collection_move_into(scene, lc_dst, lc_src);
+
+ if (!BKE_layer_collection_move_into(scene, lc_dst, lc_src)) {
+ return 0;
+ }
+
+ DAG_relations_tag_update(bmain);
+ WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
+
+ return 1;
}
static void rna_LayerCollection_hide_update(bContext *C, PointerRNA *UNUSED(ptr))
@@ -2674,7 +2723,6 @@ LayerCollection * rna_SceneLayer_collection_link(
Scene *scene = (Scene *)id;
LayerCollection *lc = BKE_collection_link(sl, sc);
- /* TODO(sergey/dfelinto): Only update relations for the current scenelayer. */
DAG_relations_tag_update(bmain);
WM_main_add_notifier(NC_SCENE | ND_LAYER, scene);
@@ -2693,10 +2741,7 @@ static void rna_SceneLayer_collection_unlink(
BKE_collection_unlink(sl, lc);
- /* needed otherwise the depgraph will contain freed objects which can crash, see [#20958] */
- /* TODO(sergey/dfelinto): Only update relations for the current scenelayer. */
DAG_relations_tag_update(bmain);
-
WM_main_add_notifier(NC_SCENE | ND_LAYER | ND_OB_ACTIVE, scene);
}
@@ -2857,12 +2902,14 @@ static void rna_SceneLayer_active_layer_set(PointerRNA *ptr, PointerRNA value)
if (index != -1) scene->active_layer = index;
}
-static SceneLayer *rna_SceneLayer_new(ID *id, Scene *UNUSED(sce), const char *name)
+static SceneLayer *rna_SceneLayer_new(
+ ID *id, Scene *UNUSED(sce), Main *bmain, const char *name)
{
Scene *scene = (Scene *)id;
SceneLayer *sl = BKE_scene_layer_add(scene, name);
DAG_id_tag_update(&scene->id, 0);
+ DAG_relations_tag_update(bmain);
WM_main_add_notifier(NC_SCENE | ND_LAYER, NULL);
return sl;
@@ -5769,7 +5816,7 @@ static void rna_def_scene_collections(BlenderRNA *brna, PropertyRNA *cprop)
func = RNA_def_function(srna, "new", "rna_SceneCollection_new");
RNA_def_function_ui_description(func, "Add a collection to scene");
- RNA_def_function_flag(func, FUNC_USE_SELF_ID);
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN);
parm = RNA_def_string(func, "name", "SceneCollection", 0, "", "New name for the collection (not unique)");
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
parm = RNA_def_pointer(func, "result", "SceneCollection", "", "Newly created collection");
@@ -5777,7 +5824,7 @@ static void rna_def_scene_collections(BlenderRNA *brna, PropertyRNA *cprop)
func = RNA_def_function(srna, "remove", "rna_SceneCollection_remove");
RNA_def_function_ui_description(func, "Remove a collection layer");
- RNA_def_function_flag(func, FUNC_USE_REPORTS | FUNC_USE_SELF_ID);
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID | FUNC_USE_MAIN | FUNC_USE_REPORTS);
parm = RNA_def_pointer(func, "layer", "SceneCollection", "", "Collection to remove");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED | PARM_RNAPTR);
RNA_def_parameter_clear_flags(parm, PROP_THICK_WRAP, 0);
@@ -5859,2
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list