[Bf-blender-cvs] [9be32ac5fed] blender2.8: Fix manipulator crash when modal operator doesn't run

Campbell Barton noreply at git.blender.org
Fri Jan 5 04:54:22 CET 2018


Commit: 9be32ac5fed2b3d40fe12f31667b58ed1f9da623
Author: Campbell Barton
Date:   Fri Jan 5 14:53:10 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB9be32ac5fed2b3d40fe12f31667b58ed1f9da623

Fix manipulator crash when modal operator doesn't run

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

M	source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c

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

diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c b/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c
index ab7b4688d49..bf9b5b72c67 100644
--- a/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c
@@ -893,17 +893,13 @@ void wm_manipulatormap_modal_set(
 
 		WM_manipulatormap_tooltip_clear(C, mmap);
 
-		/* For now only grab cursor for 3D manipulators. */
-		int retval = OPERATOR_RUNNING_MODAL;
-
 		if (mpr->type->invoke &&
 		    (mpr->type->modal || mpr->custom_modal))
 		{
-			retval = mpr->type->invoke(C, mpr, event);
-		}
-
-		if ((retval & OPERATOR_RUNNING_MODAL) == 0) {
-			return;
+			const int retval = mpr->type->invoke(C, mpr, event);
+			if ((retval & OPERATOR_RUNNING_MODAL) == 0) {
+				return;
+			}
 		}
 
 		mpr->state |= WM_MANIPULATOR_STATE_MODAL;
@@ -922,7 +918,10 @@ void wm_manipulatormap_modal_set(
 
 		struct wmManipulatorOpElem *mpop = WM_manipulator_operator_get(mpr, mpr->highlight_part);
 		if (mpop && mpop->type) {
-			WM_operator_name_call_ptr(C, mpop->type, WM_OP_INVOKE_DEFAULT, &mpop->ptr);
+			const int retval = WM_operator_name_call_ptr(C, mpop->type, WM_OP_INVOKE_DEFAULT, &mpop->ptr);
+			if ((retval & OPERATOR_RUNNING_MODAL) == 0) {
+				wm_manipulatormap_modal_set(mmap, C, mpr, event, false);
+			}
 
 			/* we failed to hook the manipulator to the operator handler or operator was cancelled, return */
 			if (!mmap->mmap_context.modal) {



More information about the Bf-blender-cvs mailing list