[Bf-blender-cvs] [31d762c3a80] master: Fix T66356: runtime assert disabling a collection

Campbell Barton noreply at git.blender.org
Fri Jul 5 08:28:15 CEST 2019


Commit: 31d762c3a80da99afa4e3ba6dd308746011de6cb
Author: Campbell Barton
Date:   Fri Jul 5 16:25:54 2019 +1000
Branches: master
https://developer.blender.org/rB31d762c3a80da99afa4e3ba6dd308746011de6cb

Fix T66356: runtime assert disabling a collection

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

M	source/blender/editors/include/ED_object.h
M	source/blender/editors/object/object_select.c
M	source/blender/makesrna/intern/rna_layer.c

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

diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index a4c68c2c5ad..038f1bf52a6 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -121,6 +121,9 @@ void ED_object_parent_clear(struct Object *ob, const int type);
 
 void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode);
 void ED_object_base_activate(struct bContext *C, struct Base *base);
+void ED_object_base_active_refresh(struct Main *bmain,
+                                   struct Scene *scene,
+                                   struct ViewLayer *view_layer);
 void ED_object_base_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *ob);
 bool ED_object_base_deselect_all_ex(struct ViewLayer *view_layer,
                                     struct View3D *v3d,
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index fcba69f7e5d..da06707ebac 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -118,19 +118,28 @@ void ED_object_base_select(Base *base, eObjectSelect_Mode mode)
   }
 }
 
+/**
+ * Call when the active base has changed.
+ */
+void ED_object_base_active_refresh(Main *bmain, Scene *scene, ViewLayer *view_layer)
+{
+  WM_main_add_notifier(NC_SCENE | ND_OB_ACTIVE, scene);
+  DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+  struct wmMsgBus *mbus = ((wmWindowManager *)bmain->wm.first)->message_bus;
+  if (mbus != NULL) {
+    WM_msg_publish_rna_prop(mbus, &scene->id, view_layer, LayerObjects, active);
+  }
+}
+
 /**
  * Change active base, it includes the notifier
  */
 void ED_object_base_activate(bContext *C, Base *base)
 {
-  struct wmMsgBus *mbus = CTX_wm_message_bus(C);
   Scene *scene = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
   view_layer->basact = base;
-
-  WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, scene);
-  WM_msg_publish_rna_prop(mbus, &scene->id, view_layer, LayerObjects, active);
-  DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+  ED_object_base_active_refresh(CTX_data_main(C), scene, view_layer);
 }
 
 bool ED_object_base_deselect_all_ex(ViewLayer *view_layer,
diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c
index be7985b69a4..1c0ced060d5 100644
--- a/source/blender/makesrna/intern/rna_layer.c
+++ b/source/blender/makesrna/intern/rna_layer.c
@@ -278,15 +278,18 @@ static void rna_LayerCollection_exclude_update(Main *bmain, Scene *UNUSED(scene)
   LayerCollection *lc = (LayerCollection *)ptr->data;
   ViewLayer *view_layer = BKE_view_layer_find_from_collection(scene, lc);
 
-  /* Set/Unset it recursively to match the behaviour of excluding via the menu or shortcuts. */
-  rna_LayerCollection_exclude_update_recursive(&lc->layer_collections,
-                                               (lc->flag & LAYER_COLLECTION_EXCLUDE) != 0);
+  /* Set/Unset it recursively to match the behavior of excluding via the menu or shortcuts. */
+  const bool exclude = (lc->flag & LAYER_COLLECTION_EXCLUDE) != 0;
+  rna_LayerCollection_exclude_update_recursive(&lc->layer_collections, exclude);
 
   BKE_layer_collection_sync(scene, view_layer);
 
   DEG_id_tag_update(&scene->id, ID_RECALC_BASE_FLAGS);
   DEG_relations_tag_update(bmain);
   WM_main_add_notifier(NC_SCENE | ND_LAYER_CONTENT, NULL);
+  if (exclude) {
+    ED_object_base_active_refresh(bmain, scene, view_layer);
+  }
 }
 
 static void rna_LayerCollection_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)



More information about the Bf-blender-cvs mailing list