[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24688] trunk/blender/source/blender: Support for grab cursor in macro system (and vice versa).

Martin Poirier theeth at yahoo.com
Thu Nov 19 20:27:10 CET 2009


Revision: 24688
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24688
Author:   theeth
Date:     2009-11-19 20:27:10 +0100 (Thu, 19 Nov 2009)

Log Message:
-----------
Support for grab cursor in macro system (and vice versa).

This may result in cursor being grabbed twice (though we don't have any macro that can do this at the moment). If this is a problem, a check can be added.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/mesh/mesh_ops.c
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_ops.c	2009-11-19 18:48:31 UTC (rev 24687)
+++ trunk/blender/source/blender/editors/mesh/mesh_ops.c	2009-11-19 19:27:10 UTC (rev 24688)
@@ -185,7 +185,7 @@
 	otmacro= WM_operatortype_macro_define(ot, "TFM_OT_translate");
 	RNA_enum_set(otmacro->ptr, "proportional", 0);
 
-	ot= WM_operatortype_append_macro("MESH_OT_extrude_move_along_normals", "Extrude Along Normals", OPTYPE_UNDO|OPTYPE_REGISTER|OPTYPE_BLOCKING);
+	ot= WM_operatortype_append_macro("MESH_OT_extrude_move_along_normals", "Extrude Along Normals", OPTYPE_UNDO|OPTYPE_REGISTER);
 	ot->poll = ED_operator_editmesh_face_select; /* restrict extrude along normals to face select */
 	WM_operatortype_macro_define(ot, "MESH_OT_extrude");
 	otmacro= WM_operatortype_macro_define(ot, "TFM_OT_translate");
@@ -193,7 +193,7 @@
 	RNA_enum_set(otmacro->ptr, "constraint_orientation", V3D_MANIP_NORMAL);
 	RNA_boolean_set_array(otmacro->ptr, "constraint_axis", constraint_axis);
 
-	ot= WM_operatortype_append_macro("MESH_OT_extrude_move", "Extrude", OPTYPE_UNDO|OPTYPE_REGISTER|OPTYPE_BLOCKING);
+	ot= WM_operatortype_append_macro("MESH_OT_extrude_move", "Extrude", OPTYPE_UNDO|OPTYPE_REGISTER);
 	WM_operatortype_macro_define(ot, "MESH_OT_extrude");
 	otmacro= WM_operatortype_macro_define(ot, "TFM_OT_translate");
 	RNA_enum_set(otmacro->ptr, "proportional", 0);

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-11-19 18:48:31 UTC (rev 24687)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2009-11-19 19:27:10 UTC (rev 24688)
@@ -461,11 +461,19 @@
 				WM_operator_free(op);
 		}
 		else if(retval & OPERATOR_RUNNING_MODAL) {
-			/* grab cursor during blocking modal ops (X11) */
-			if(ot->flag & OPTYPE_BLOCKING) {
+			/* grab cursor during blocking modal ops (X11)
+			 * Also check for macro
+			 * */
+			if(ot->flag & OPTYPE_BLOCKING || (op->opm && op->opm->type->flag & OPTYPE_BLOCKING)) {
 				int bounds[4] = {-1,-1,-1,-1};
-				int wrap = (U.uiflag & USER_CONTINUOUS_MOUSE) && ((op->flag & OP_GRAB_POINTER) || (ot->flag & OPTYPE_GRAB_POINTER));
+				int wrap;
 
+				if (op->opm) {
+					wrap = (U.uiflag & USER_CONTINUOUS_MOUSE) && ((op->opm->flag & OP_GRAB_POINTER) || (op->opm->type->flag & OPTYPE_GRAB_POINTER));
+				} else {
+					wrap = (U.uiflag & USER_CONTINUOUS_MOUSE) && ((op->flag & OP_GRAB_POINTER) || (ot->flag & OPTYPE_GRAB_POINTER));
+				}
+
 				if(wrap) {
 					ARegion *ar= CTX_wm_region(C);
 					if(ar) {

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2009-11-19 18:48:31 UTC (rev 24687)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2009-11-19 19:27:10 UTC (rev 24688)
@@ -260,6 +260,26 @@
 					BLI_remlink(&win->modalhandlers, handler);
 					wm_event_free_handler(handler);
 				}
+
+				/* if operator is blocking, grab cursor
+				 * This may end up grabbing twice, but we don't care.
+				 * */
+				if(op->opm->type->flag & OPTYPE_BLOCKING) {
+					int bounds[4] = {-1,-1,-1,-1};
+					int wrap = (U.uiflag & USER_CONTINUOUS_MOUSE) && ((op->opm->flag & OP_GRAB_POINTER) || (op->opm->type->flag & OPTYPE_GRAB_POINTER));
+
+					if(wrap) {
+						ARegion *ar= CTX_wm_region(C);
+						if(ar) {
+							bounds[0]= ar->winrct.xmin;
+							bounds[1]= ar->winrct.ymax;
+							bounds[2]= ar->winrct.xmax;
+							bounds[3]= ar->winrct.ymin;
+						}
+					}
+
+					WM_cursor_grab(CTX_wm_window(C), wrap, FALSE, bounds);
+				}
 			}
 
 		}





More information about the Bf-blender-cvs mailing list