[Bf-blender-cvs] [cfd591e95d7] temp-workspace_mode: Fix possible issues when changing active object

Julian Eisel noreply at git.blender.org
Sat Dec 23 16:36:44 CET 2017


Commit: cfd591e95d7c099be1fdd9e47064b630a4ced8f3
Author: Julian Eisel
Date:   Sat Dec 23 01:53:11 2017 +0100
Branches: temp-workspace_mode
https://developer.blender.org/rBcfd591e95d7c099be1fdd9e47064b630a4ced8f3

Fix possible issues when changing active object

It may make more sense to do this via notifier, but I'm afraid this
would be a bit of a can of worms.

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

M	source/blender/alembic/intern/alembic_capi.cc
M	source/blender/blenkernel/BKE_collection.h
M	source/blender/blenkernel/BKE_group.h
M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/BKE_workspace.h
M	source/blender/blenkernel/intern/collection.c
M	source/blender/blenkernel/intern/group.c
M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/workspace.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/collada/collada_utils.cpp
M	source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
M	source/blender/editors/mesh/mesh_navmesh.c
M	source/blender/editors/object/object_hook.c
M	source/blender/editors/object/object_select.c
M	source/blender/editors/scene/scene_edit.c
M	source/blender/editors/space_outliner/outliner_collections.c
M	source/blender/editors/space_outliner/outliner_tools.c
M	source/blender/editors/space_outliner/outliner_tree.c
M	source/blender/makesrna/intern/rna_layer.c
M	source/blender/makesrna/intern/rna_object_api.c

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

diff --git a/source/blender/alembic/intern/alembic_capi.cc b/source/blender/alembic/intern/alembic_capi.cc
index 8d0ecf07f4f..ee821e2ffc6 100644
--- a/source/blender/alembic/intern/alembic_capi.cc
+++ b/source/blender/alembic/intern/alembic_capi.cc
@@ -856,7 +856,7 @@ static void import_endjob(void *user_data)
 			BKE_collection_object_add(&data->scene->id, lc->scene_collection, ob);
 
 			base = BKE_view_layer_base_find(view_layer, ob);
-			BKE_view_layer_base_select(view_layer, base, NULL);
+			BKE_view_layer_base_select(view_layer, base, data->bmain);
 
 			DEG_id_tag_update_ex(data->bmain, &ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
 		}
diff --git a/source/blender/blenkernel/BKE_collection.h b/source/blender/blenkernel/BKE_collection.h
index 48b4ff881ae..117da3b1163 100644
--- a/source/blender/blenkernel/BKE_collection.h
+++ b/source/blender/blenkernel/BKE_collection.h
@@ -47,7 +47,7 @@ struct SceneCollection;
 
 struct SceneCollection *BKE_collection_add(
         struct ID *owner_id, struct SceneCollection *sc_parent, const int type, const char *name);
-bool BKE_collection_remove(struct ID *owner_id, struct SceneCollection *sc);
+bool BKE_collection_remove(struct ID *owner_id, struct SceneCollection *sc, const struct Main *bmain);
 void BKE_collection_copy_data(struct SceneCollection *sc_dst, struct SceneCollection *sc_src, const int flag);
 struct SceneCollection *BKE_collection_master(const struct ID *owner_id);
 void BKE_collection_rename(const struct Scene *scene, struct SceneCollection *sc, const char *name);
@@ -63,9 +63,9 @@ struct Group *BKE_collection_group_create(struct Main *bmain, struct Scene *scen
 void BKE_collection_reinsert_after(const struct Scene *scene, struct SceneCollection *sc_reinsert, struct SceneCollection *sc_after);
 void BKE_collection_reinsert_into(struct SceneCollection *sc_reinsert, struct SceneCollection *sc_into);
 
-bool BKE_collection_move_above(const struct ID *owner_id, struct SceneCollection *sc_dst, struct SceneCollection *sc_src);
-bool BKE_collection_move_below(const struct ID *owner_id, struct SceneCollection *sc_dst, struct SceneCollection *sc_src);
-bool BKE_collection_move_into(const struct ID *owner_id, struct SceneCollection *sc_dst, struct SceneCollection *sc_src);
+bool BKE_collection_move_above(const struct ID *owner_id, struct SceneCollection *sc_dst, struct SceneCollection *sc_src, const struct Main *bmain);
+bool BKE_collection_move_below(const struct ID *owner_id, struct SceneCollection *sc_dst, struct SceneCollection *sc_src, const struct Main *bmain);
+bool BKE_collection_move_into(const struct ID *owner_id, struct SceneCollection *sc_dst, struct SceneCollection *sc_src, const struct Main *bmain);
 
 typedef void (*BKE_scene_objects_Cb)(struct Object *ob, void *data);
 typedef void (*BKE_scene_collections_Cb)(struct SceneCollection *ob, void *data);
diff --git a/source/blender/blenkernel/BKE_group.h b/source/blender/blenkernel/BKE_group.h
index 74255cfc941..bdaad858e4f 100644
--- a/source/blender/blenkernel/BKE_group.h
+++ b/source/blender/blenkernel/BKE_group.h
@@ -41,7 +41,7 @@ struct Object;
 struct Scene;
 
 void          BKE_group_free(struct Group *group);
-void          BKE_group_init(struct Group *group);
+void          BKE_group_init(struct Group *group, const struct Main *bmain);
 struct Group *BKE_group_add(struct Main *bmain, const char *name);
 void          BKE_group_copy_data(struct Main *bmain, struct Group *group_dst, const struct Group *group_src, const int flag);
 struct Group *BKE_group_copy(struct Main *bmain, const struct Group *group);
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 5d92a9aafdd..ffb010553df 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -65,7 +65,7 @@ struct ViewLayer *BKE_view_layer_group_add(struct Group *group);
 /* DEPRECATED */
 struct ViewLayer *BKE_view_layer_context_active_PLACEHOLDER(const struct Scene *scene);
 
-void BKE_view_layer_free(struct ViewLayer *view_layer);
+void BKE_view_layer_free(struct ViewLayer *view_layer, const struct Main *bmain);
 
 void BKE_view_layer_selected_objects_tag(struct ViewLayer *view_layer, const int tag);
 
@@ -74,14 +74,14 @@ struct ViewLayer *BKE_view_layer_first_from_id(const struct ID *owner_id);
 struct ViewLayer *BKE_view_layer_find_from_collection(const struct ID *owner_id, struct LayerCollection *lc);
 struct Base *BKE_view_layer_base_find(struct ViewLayer *view_layer, struct Object *ob);
 void BKE_view_layer_base_deselect_all(struct ViewLayer *view_layer);
-void BKE_view_layer_base_select(struct ViewLayer *view_layer, struct Base *selbase, struct WorkSpace *workspace);
+void BKE_view_layer_base_select(struct ViewLayer *view_layer, struct Base *selbase, const struct Main *bmain);
 
 void BKE_view_layer_copy_data(
         struct ViewLayer *view_layer_dst, struct ViewLayer *view_layer_src,
         struct SceneCollection *mc_dst, struct SceneCollection *mc_src,
         const int flag);
 
-void BKE_layer_collection_free(struct ViewLayer *view_layer, struct LayerCollection *lc);
+void BKE_layer_collection_free(struct ViewLayer *view_layer, struct LayerCollection *lc, const struct Main *bmain);
 
 struct LayerCollection *BKE_layer_collection_get_active(struct ViewLayer *view_layer);
 struct LayerCollection *BKE_layer_collection_get_active_ensure(struct Scene *scene, struct ViewLayer *view_layer);
@@ -91,15 +91,15 @@ int BKE_layer_collection_count(struct ViewLayer *view_layer);
 struct LayerCollection *BKE_layer_collection_from_index(struct ViewLayer *view_layer, const int index);
 int BKE_layer_collection_findindex(struct ViewLayer *view_layer, const struct LayerCollection *lc);
 
-bool BKE_layer_collection_move_above(const struct ID *owner_id, struct LayerCollection *lc_dst, struct LayerCollection *lc_src);
-bool BKE_layer_collection_move_below(const struct ID *owner_id, struct LayerCollection *lc_dst, struct LayerCollection *lc_src);
-bool BKE_layer_collection_move_into(const struct ID *owner_id, struct LayerCollection *lc_dst, struct LayerCollection *lc_src);
+bool BKE_layer_collection_move_above(const struct ID *owner_id, struct LayerCollection *lc_dst, struct LayerCollection *lc_src, const struct Main *bmain);
+bool BKE_layer_collection_move_below(const struct ID *owner_id, struct LayerCollection *lc_dst, struct LayerCollection *lc_src, const struct Main *bmain);
+bool BKE_layer_collection_move_into(const struct ID *owner_id, struct LayerCollection *lc_dst, struct LayerCollection *lc_src, const struct Main *bmain);
 
-void BKE_layer_collection_resync(const struct ID *owner_id, const struct SceneCollection *sc);
+void BKE_layer_collection_resync(const struct ID *owner_id, const struct SceneCollection *sc, const struct Main *bmain);
 
 struct LayerCollection *BKE_collection_link(struct ViewLayer *view_layer, struct SceneCollection *sc);
 
-void BKE_collection_unlink(struct ViewLayer *view_layer, struct LayerCollection *lc);
+void BKE_collection_unlink(struct ViewLayer *view_layer, struct LayerCollection *lc, const struct Main *bmain);
 
 void BKE_collection_enable(struct ViewLayer *view_layer, struct LayerCollection *lc);
 
@@ -110,7 +110,7 @@ bool BKE_scene_has_object(struct Scene *scene, struct Object *ob);
 
 void BKE_layer_sync_new_scene_collection(struct ID *owner_id, const struct SceneCollection *sc_parent, struct SceneCollection *sc);
 void BKE_layer_sync_object_link(const struct ID *owner_id, struct SceneCollection *sc, struct Object *ob);
-void BKE_layer_sync_object_unlink(const struct ID *owner_id, struct SceneCollection *sc, struct Object *ob);
+void BKE_layer_sync_object_unlink(const struct ID *owner_id, struct SceneCollection *sc, struct Object *ob, const struct Main *bmain);
 
 /* override */
 
diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
index 73f0ef15029..b38173bdf25 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -83,6 +83,9 @@ struct WorkSpaceLayout *BKE_workspace_layout_iter_circular(
         bool (*callback)(const struct WorkSpaceLayout *layout, void *arg),
         void *arg, const bool iter_backward);
 
+void BKE_workspace_active_base_changed(
+        const struct Main *bmain,
+        const struct ViewLayer *active_view_layer);
 
 /* -------------------------------------------------------------------- */
 /* Getters/Setters */
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index f8934184928..e548cfab4df 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -146,12 +146,12 @@ static bool collection_remlink(SceneCollection *sc_parent, SceneCollection *sc_g
 /**
  * Recursively remove any instance of this SceneCollection
  */
-static void layer_collection_remove(ViewLayer *view_layer, ListBase *lb, const SceneCollection *sc)
+static void layer_collection_remove(ViewLayer *view_layer, ListBase *lb, const SceneCollection *sc, const Main *bmain)
 {
 	LayerCollection *lc = lb->first;
 	while (lc) {
 		if (lc->scene_collection == sc) {
-			BKE_layer_collection_free(view_layer, lc);
+			BKE_layer_collection_free(view_layer, lc, bmain);
 			BLI_remlink(lb, lc);
 
 			LayerCollection *lc_next = lc->next;
@@ -167,7 +167,7 @@ static void layer_collection_remove(ViewLayer *view_layer, ListBase *lb, const S
 		}
 
 		else {
-			layer_collection_remove(view_layer, &lc->layer_collections, sc);
+			layer_collection_remove(view_layer, &lc->layer_collections, sc, bmain);
 			lc = lc->next;
 		}
 	}
@@ -176,7 +176,7 @@ static void layer_collection_remove(ViewLayer *view_layer, ListBase *lb, const S
 /**
  * Remove a collection from the scene, and syncronize all render layers
  */
-bool BKE_collection_remove(ID *owner_id, SceneCollection *sc)
+bool BKE_collection_remove(ID *owner_id, SceneCollection *sc, const Main *bmain)
 {
 	SceneCollection *sc_master = collection_master_from_id(owner_id);
 
@@ -195,7 +195,7 @@ bool BKE_collection_remove(ID *owner_id, SceneCollection *sc)
 
 	/* check all layers that use this collection and clear them */
 	for (Vi

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list