projects
/
blender.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix T61272: Undo fails to track multi-edit mode enter/exit
[blender.git]
/
source
/
blender
/
editors
/
lattice
/
editlattice_undo.c
diff --git
a/source/blender/editors/lattice/editlattice_undo.c
b/source/blender/editors/lattice/editlattice_undo.c
index c6c0ad542d1bcd15f808a56fc9ebe8d6e5580b73..8dddec3ed6daefdf7b8df8bee0ff1d5bf39f65a3 100644
(file)
--- a/
source/blender/editors/lattice/editlattice_undo.c
+++ b/
source/blender/editors/lattice/editlattice_undo.c
@@
-148,9
+148,11
@@
static bool lattice_undosys_step_encode(struct bContext *C, struct Main *UNUSED(
{
LatticeUndoStep *us = (LatticeUndoStep *)us_p;
{
LatticeUndoStep *us = (LatticeUndoStep *)us_p;
+ /* Important not to use the 3D view when getting objects because all objects
+ * outside of this list will be moved out of edit-mode when reading back undo steps. */
ViewLayer *view_layer = CTX_data_view_layer(C);
uint objects_len = 0;
ViewLayer *view_layer = CTX_data_view_layer(C);
uint objects_len = 0;
- Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer,
CTX_wm_view3d(C)
, &objects_len);
+ Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer,
NULL
, &objects_len);
us->elems = MEM_callocN(sizeof(*us->elems) * objects_len, __func__);
us->elems_len = objects_len;
us->elems = MEM_callocN(sizeof(*us->elems) * objects_len, __func__);
us->elems_len = objects_len;
@@
-170,12
+172,13
@@
static bool lattice_undosys_step_encode(struct bContext *C, struct Main *UNUSED(
static void lattice_undosys_step_decode(struct bContext *C, struct Main *UNUSED(bmain), UndoStep *us_p, int UNUSED(dir))
{
static void lattice_undosys_step_decode(struct bContext *C, struct Main *UNUSED(bmain), UndoStep *us_p, int UNUSED(dir))
{
- /* TODO(campbell): undo_system: use low-level API to set mode. */
- ED_object_mode_set(C, OB_MODE_EDIT);
- BLI_assert(lattice_undosys_poll(C));
-
LatticeUndoStep *us = (LatticeUndoStep *)us_p;
LatticeUndoStep *us = (LatticeUndoStep *)us_p;
+ /* Load all our objects into edit-mode, clear everything else. */
+ ED_undo_object_editmode_restore_helper(C, &us->elems[0].obedit_ref.ptr, us->elems_len, sizeof(*us->elems));
+
+ BLI_assert(lattice_undosys_poll(C));
+
for (uint i = 0; i < us->elems_len; i++) {
LatticeUndoStep_Elem *elem = &us->elems[i];
Object *obedit = elem->obedit_ref.ptr;
for (uint i = 0; i < us->elems_len; i++) {
LatticeUndoStep_Elem *elem = &us->elems[i];
Object *obedit = elem->obedit_ref.ptr;