[Bf-blender-cvs] [6df68efcbb9] master: Fix edit-mesh undo using the current selection

Campbell Barton noreply at git.blender.org
Thu Jan 31 06:03:26 CET 2019


Commit: 6df68efcbb97207f93abce7bc8abde2220444e79
Author: Campbell Barton
Date:   Thu Jan 31 16:02:23 2019 +1100
Branches: master
https://developer.blender.org/rB6df68efcbb97207f93abce7bc8abde2220444e79

Fix edit-mesh undo using the current selection

Any meshes selected would be added to the mode when reading undo.

===================================================================

M	source/blender/editors/mesh/editmesh_undo.c

===================================================================

diff --git a/source/blender/editors/mesh/editmesh_undo.c b/source/blender/editors/mesh/editmesh_undo.c
index 97a411cba54..1a57fe49d39 100644
--- a/source/blender/editors/mesh/editmesh_undo.c
+++ b/source/blender/editors/mesh/editmesh_undo.c
@@ -723,14 +723,19 @@ static bool mesh_undosys_step_encode(struct bContext *C, struct Main *UNUSED(bma
 	return true;
 }
 
-static void mesh_undosys_step_decode(struct bContext *C, struct Main *UNUSED(bmain), UndoStep *us_p, int UNUSED(dir))
+static void mesh_undosys_step_decode(struct bContext *C, struct Main *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(mesh_undosys_poll(C));
-
 	MeshUndoStep *us = (MeshUndoStep *)us_p;
 
+	Scene *scene = CTX_data_scene(C);
+	for (uint i = 0; i < us->elems_len; i++) {
+		MeshUndoStep_Elem *elem = &us->elems[i];
+		Object *obedit = elem->obedit_ref.ptr;
+		ED_object_editmode_enter_ex(bmain, scene, obedit, EM_NO_CONTEXT);
+	}
+
+	BLI_assert(mesh_undosys_poll(C));
+
 	for (uint i = 0; i < us->elems_len; i++) {
 		MeshUndoStep_Elem *elem = &us->elems[i];
 		Object *obedit = elem->obedit_ref.ptr;



More information about the Bf-blender-cvs mailing list