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:
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
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue