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); } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs