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.
This commit is contained in:
Campbell Barton 2021-02-25 15:38:57 +11:00
parent 3ed6d9f966
commit 2b60d7d09c
Notes: blender-bot 2023-02-14 06:45:14 +01:00
Referenced by commit 0c0e9390d1, Revert "Fix entering edit-mode when object mode and edit-data don't match"
Referenced by issue #86561, Crash when entering edit mode with multiple objects sharing the same mesh
1 changed files with 13 additions and 7 deletions

View File

@ -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;