[Bf-blender-cvs] [f7123f0f11c] blender2.8: WM: manipulator redo support

Campbell Barton noreply at git.blender.org
Sun May 6 10:19:56 CEST 2018


Commit: f7123f0f11c747847a0b5f785fe393f073efcc1d
Author: Campbell Barton
Date:   Sun May 6 09:49:55 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBf7123f0f11c747847a0b5f785fe393f073efcc1d

WM: manipulator redo support

Support for adjusting a setting from the last executed operator.

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

M	source/blender/windowmanager/manipulators/WM_manipulator_types.h
M	source/blender/windowmanager/manipulators/intern/wm_manipulator_group.c

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

diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_types.h b/source/blender/windowmanager/manipulators/WM_manipulator_types.h
index 8a5580582d7..e4482e797e3 100644
--- a/source/blender/windowmanager/manipulators/WM_manipulator_types.h
+++ b/source/blender/windowmanager/manipulators/WM_manipulator_types.h
@@ -153,6 +153,8 @@ typedef struct wmManipulatorOpElem {
 	/* operator properties if manipulator spawns and controls an operator,
 	 * or owner pointer if manipulator spawns and controls a property */
 	PointerRNA ptr;
+
+	bool is_redo;
 } wmManipulatorOpElem;
 
 /* manipulators are set per region by registering them on manipulator-maps */
diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator_group.c b/source/blender/windowmanager/manipulators/intern/wm_manipulator_group.c
index 31861df1db2..3d7403dc0e1 100644
--- a/source/blender/windowmanager/manipulators/intern/wm_manipulator_group.c
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator_group.c
@@ -54,6 +54,7 @@
 #include "wm_event_system.h"
 
 #include "ED_screen.h"
+#include "ED_undo.h"
 
 /* own includes */
 #include "wm_manipulator_wmapi.h"
@@ -357,6 +358,21 @@ static bool manipulator_tweak_start_and_finish(
 		*r_is_modal = false;
 	}
 	if (mpop && mpop->type) {
+
+		/* Undo/Redo */
+		if (mpop->is_redo) {
+			wmWindowManager *wm = CTX_wm_manager(C);
+			wmOperator *op = WM_operator_last_redo(C);
+
+			/* We may want to enable this, for now the manipulator can manage it's own properties. */
+#if 0
+			IDP_MergeGroup(mpop->ptr.data, op->properties, false);
+#endif
+
+			WM_operator_free_all_after(wm, op);
+			ED_undo_pop_op(C, op);
+		}
+		
 		/* XXX temporary workaround for modal manipulator operator
 		 * conflicting with modal operator attached to manipulator */
 		if (mpop->type->modal) {



More information about the Bf-blender-cvs mailing list