From 2b60d7d09c51716e8d98834061c1a61ed6b96cf5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 25 Feb 2021 15:38:57 +1100 Subject: Fix entering edit-mode when object mode and edit-data don't match In rare cases, it's possible for an object to have edit-mode data without it's Object.mode set to edit-mode. This could happen with undo, part of fix for: T85974. --- source/blender/editors/object/object_edit.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index 4cf49d262ca..da14d4ef52a 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -718,20 +718,26 @@ bool ED_object_editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag return false; } - /* this checks actual object->data, for cases when other scenes have it in editmode context */ - if (BKE_object_is_in_editmode(ob)) { - return true; - } - if (BKE_object_obdata_is_libdata(ob)) { /* Ideally the caller should check this. */ CLOG_WARN(&LOG, "Unable to enter edit-mode on library data for object '%s'", ob->id.name + 2); return false; } - ob->restore_mode = ob->mode; + if ((ob->mode & OB_MODE_EDIT) == 0) { + ob->restore_mode = ob->mode; + + ob->mode = OB_MODE_EDIT; + } - ob->mode = OB_MODE_EDIT; + /* This checks actual `object->data`, + * for cases when other scenes have it in edit-mode context. + * + * It's important to run this after setting the object's mode (above), since in rare cases + * the object may have the edit-data but not it's object-mode set. See T85974. */ + if (BKE_object_is_in_editmode(ob)) { + return true; + } if (ob->type == OB_MESH) { ok = true; -- cgit v1.2.3