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);
+                               }
                        }
 
                }


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to