[Bf-blender-cvs] [769c9a2363e] blender2.8: Object Mode: remove Scene.obedit

Campbell Barton noreply at git.blender.org
Tue Feb 13 22:48:55 CET 2018


Commit: 769c9a2363ed7dae5fceeea1f94e685482719901
Author: Campbell Barton
Date:   Wed Feb 14 08:39:10 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB769c9a2363ed7dae5fceeea1f94e685482719901

Object Mode: remove Scene.obedit

This means we can support having the same scene in different windows
with different edit-objects.

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

M	source/blender/blenkernel/intern/library_query.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
M	source/blender/editors/object/object_edit.c
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_layer.c

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

diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c
index 0f83dfe7ecf..419ed8246db 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -421,10 +421,6 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, LibraryIDLinkCallback call
 					/* nodetree **are owned by IDs**, treat them as mere sub-data and not real ID! */
 					library_foreach_ID_as_subdata_link((ID **)&scene->nodetree, callback, user_data, flag, &data);
 				}
-				/* DO NOT handle scene->basact here, it's doubling with the loop over whole scene->base later,
-				 * since basact is just a pointer to one of those items. */
-				CALLBACK_INVOKE(scene->obedit, IDWALK_CB_NOP);
-
 				if (scene->ed) {
 					Sequence *seq;
 					SEQP_BEGIN(scene->ed, seq)
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 074d7b9c90d..932f80c35d5 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -166,7 +166,6 @@ void BKE_scene_copy_data(Main *bmain, Scene *sce_dst, const Scene *sce_src, cons
 
 	sce_dst->ed = NULL;
 	sce_dst->depsgraph_hash = NULL;
-	sce_dst->obedit = NULL;
 	sce_dst->fps_info = NULL;
 
 	/* layers and collections */
@@ -982,9 +981,6 @@ void BKE_scene_set_background(Main *bmain, Scene *scene)
 	/* check for cyclic sets, for reading old files but also for definite security (py?) */
 	BKE_scene_validate_setscene(bmain, scene);
 	
-	/* can happen when switching modes in other scenes */
-	scene->obedit = NULL;
-
 	/* deselect objects (for dataselect) */
 	for (ob = bmain->object.first; ob; ob = ob->id.next)
 		ob->flag &= ~(SELECT | OB_FROMGROUP);
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index a91aeee52df..a5370313a93 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6216,7 +6216,6 @@ static void direct_link_scene(FileData *fd, Scene *sce, Main *bmain)
 	SceneRenderLayer *srl;
 	
 	sce->depsgraph_hash = NULL;
-	sce->obedit = NULL;
 	sce->fps_info = NULL;
 	sce->customdata_mask_modal = 0;
 	sce->lay_updated = 0;
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
index 5daf4629708..8bdc68d9351 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
@@ -461,18 +461,6 @@ void update_special_pointers(const Depsgraph *depsgraph,
 			}
 			break;
 		}
-		case ID_SCE:
-		{
-			const Scene *scene_orig = (const Scene *)id_orig;
-			Scene *scene_cow = (Scene *)id_cow;
-			if (scene_orig->obedit != NULL) {
-				scene_cow->obedit = (Object *)depsgraph->get_cow_id(&scene_orig->obedit->id);
-			}
-			else {
-				scene_cow->obedit = NULL;
-			}
-			break;
-		}
 		default:
 			break;
 	}
@@ -622,13 +610,6 @@ void update_copy_on_write_scene(const Depsgraph *depsgraph,
 	update_copy_on_write_view_layers(depsgraph, scene_cow, scene_orig);
 	update_copy_on_write_scene_collection(scene_cow->collection,
 	                                      scene_orig->collection);
-	// Update edit object pointer.
-	if (scene_orig->obedit != NULL) {
-		scene_cow->obedit = (Object *)depsgraph->get_cow_id(&scene_orig->obedit->id);
-	}
-	else {
-		scene_cow->obedit = NULL;
-	}
 	/* Synchronize active render engine. */
 	BLI_strncpy(scene_cow->view_render.engine_id,
 	            scene_orig->view_render.engine_id,
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 03c497bcef0..c6f9ced51a3 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -286,9 +286,6 @@ void ED_object_editmode_exit_ex(bContext *C, WorkSpace *workspace, Scene *scene,
 		ListBase pidlist;
 		PTCacheID *pid;
 
-		/* for example; displist make is different in editmode */
-		scene->obedit = NULL; // XXX for context
-
 		/* flag object caches as outdated */
 		BKE_ptcache_ids_from_object(&pidlist, obedit, scene, 0);
 		for (pid = pidlist.first; pid; pid = pid->next) {
@@ -373,8 +370,6 @@ void ED_object_editmode_enter(bContext *C, int flag)
 	if (ob->type == OB_MESH) {
 		BMEditMesh *em;
 		ok = 1;
-		scene->obedit = ob;  /* context sees this */
-
 		const bool use_key_index = mesh_needs_keyindex(ob->data);
 
 		EDBM_mesh_make(scene->toolsettings, ob, use_key_index);
@@ -404,7 +399,6 @@ void ED_object_editmode_enter(bContext *C, int flag)
 			return;
 		}
 		ok = 1;
-		scene->obedit = ob;
 		ED_armature_to_edit(arm);
 		/* to ensure all goes in restposition and without striding */
 		DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME); /* XXX: should this be OB_RECALC_DATA? */
@@ -412,21 +406,18 @@ void ED_object_editmode_enter(bContext *C, int flag)
 		WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_EDITMODE_ARMATURE, scene);
 	}
 	else if (ob->type == OB_FONT) {
-		scene->obedit = ob; /* XXX for context */
 		ok = 1;
 		ED_curve_editfont_make(ob);
 
 		WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_EDITMODE_TEXT, scene);
 	}
 	else if (ob->type == OB_MBALL) {
-		scene->obedit = ob; /* XXX for context */
 		ok = 1;
 		ED_mball_editmball_make(ob);
 
 		WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_EDITMODE_MBALL, scene);
 	}
 	else if (ob->type == OB_LATTICE) {
-		scene->obedit = ob; /* XXX for context */
 		ok = 1;
 		ED_lattice_editlatt_make(ob);
 
@@ -434,7 +425,6 @@ void ED_object_editmode_enter(bContext *C, int flag)
 	}
 	else if (ob->type == OB_SURF || ob->type == OB_CURVE) {
 		ok = 1;
-		scene->obedit = ob; /* XXX for context */
 		ED_curve_editnurb_make(ob);
 
 		WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_EDITMODE_CURVE, scene);
@@ -446,7 +436,6 @@ void ED_object_editmode_enter(bContext *C, int flag)
 		DEG_id_tag_update(&scene->id, 0);
 	}
 	else {
-		scene->obedit = NULL; /* XXX for context */
 		workspace->object_mode &= ~OB_MODE_EDIT;
 		WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_OBJECT, scene);
 	}
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index bf5f7c1d0da..1642da25481 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1623,7 +1623,7 @@ typedef struct Scene {
 	
 	ListBase base DNA_DEPRECATED;
 	struct Base  *basact DNA_DEPRECATED; /* active base */
-	struct Object *obedit;		/* name replaces old G.obedit */
+	void *_pad1;
 	
 	float cursor[3];			/* 3d cursor location */
 	char _pad[4];
diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c
index efa05ed5b92..9489fa243dc 100644
--- a/source/blender/makesrna/intern/rna_layer.c
+++ b/source/blender/makesrna/intern/rna_layer.c
@@ -73,6 +73,7 @@ const EnumPropertyItem rna_enum_collection_type_items[] = {
 #include "BKE_node.h"
 #include "BKE_scene.h"
 #include "BKE_mesh.h"
+#include "BKE_object.h"
 #include "BKE_workspace.h"
 
 #include "DEG_depsgraph_build.h"
@@ -845,11 +846,25 @@ static void rna_LayerObjects_active_object_update(struct bContext *C, PointerRNA
 	if (scene != ptr->id.data) {
 		return;
 	}
-
 	ViewLayer *view_layer = (ViewLayer *)ptr->data;
-	if (scene->obedit) {
-		ED_object_editmode_exit(C, EM_FREEDATA);
+
+	/* We don't know the previous active object in update.
+	 *
+	 * Not correct because it's possible other work-spaces use these.
+	 * although that's a corner case. */
+	WorkSpace *workspace = CTX_wm_workspace(C);
+	if (workspace->object_mode & OB_MODE_EDIT) {
+		Object *obact = OBACT(view_layer);
+		FOREACH_OBJECT(view_layer, ob) {
+			if (ob != obact) {
+				if (BKE_object_is_in_editmode(ob)) {
+					ED_object_editmode_exit_ex(NULL, workspace, scene, ob, EM_FREEDATA);
+				}
+			}
+		}
+		FOREACH_OBJECT_END;
 	}
+
 	ED_object_base_activate(C, view_layer->basact);
 }



More information about the Bf-blender-cvs mailing list