diff options
9 files changed, 25 insertions, 23 deletions
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 45675d44d31..12ba14ab189 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2376,8 +2376,8 @@ void VIEW3D_OT_manipulator(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; - /* rna later */ - RNA_def_boolean_vector(ot->srna, "constraint_axis", 3, NULL, "Constraint Axis", ""); + /* properties to pass to transform */ + Transform_Properties(ot, P_CONSTRAINT); } static int enable_manipulator_invoke(bContext *C, wmOperator *op, wmEvent *event) diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index ccc2717556d..d2fda2f2f76 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -115,7 +115,8 @@ void view3d_keymap(wmKeyConfig *keyconf) /* only for region 3D window */ keymap= WM_keymap_find(keyconf, "3D View", SPACE_VIEW3D, 0); - WM_keymap_verify_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_ANY, 0); + kmi = WM_keymap_verify_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_ANY, 0); + RNA_boolean_set(kmi->ptr, "release_confirm", 1); /* * Doesn't work with KM_SHIFT, have to use KM_ANY and filter in invoke * */ diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 13684708f8e..498313838df 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -1032,7 +1032,7 @@ int transformEvent(TransInfo *t, wmEvent *event) } /* confirm transform if launch key is released after mouse move */ - if (t->flag & T_RELEASE_CONFIRM || t->state != TRANS_STARTING) + if (t->flag & T_RELEASE_CONFIRM) { /* XXX Keyrepeat bug in Xorg fucks this up, will test when fixed */ if (event->type == t->launch_event && (t->launch_event == LEFTMOUSE || t->launch_event == RIGHTMOUSE)) diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index e9ee45259e9..8bbeec63155 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -1000,7 +1000,7 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) } else { - if (U.flag & USER_DRAGIMMEDIATE) + if (U.flag & USER_RELEASECONFIRM) { t->flag |= T_RELEASE_CONFIRM; } diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index 5e7c6fc9d3d..b11f35dd363 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -1551,6 +1551,8 @@ static int manipulator_selectbuf(ScrArea *sa, ARegion *ar, short *mval, float ho return 0; } +int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerRNA *properties, ReportList *reports); + /* return 0; nothing happened */ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) { @@ -1564,6 +1566,9 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) if(!(v3d->twflag & V3D_USE_MANIPULATOR)) return 0; if(!(v3d->twflag & V3D_DRAW_MANIPULATOR)) return 0; + /* Force orientation */ + RNA_enum_set(op->ptr, "constraint_orientation", v3d->twmode); + // find the hotspots first test narrow hotspot val= manipulator_selectbuf(sa, ar, event->mval, 0.5f*(float)U.tw_hotspot); if(val) { @@ -1603,6 +1608,7 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) } RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); WM_operator_name_call(C, "TRANSFORM_OT_translate", WM_OP_INVOKE_DEFAULT, op->ptr); + //wm_operator_invoke(C, WM_operatortype_find("TRANSFORM_OT_translate", 0), event, op->ptr, NULL); } else if (drawflags & MAN_SCALE_C) { switch(drawflags) { @@ -1633,8 +1639,10 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) } RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); WM_operator_name_call(C, "TRANSFORM_OT_resize", WM_OP_INVOKE_DEFAULT, op->ptr); + //wm_operator_invoke(C, WM_operatortype_find("TRANSFORM_OT_resize", 0), event, op->ptr, NULL); } else if (drawflags == MAN_ROT_T) { /* trackball need special case, init is different */ + //wm_operator_invoke(C, WM_operatortype_find("TRANSFORM_OT_trackball", 0), event, op->ptr, NULL); WM_operator_name_call(C, "TRANSFORM_OT_trackball", WM_OP_INVOKE_DEFAULT, op->ptr); } else if (drawflags & MAN_ROT_C) { @@ -1651,6 +1659,7 @@ int BIF_do_manipulator(bContext *C, struct wmEvent *event, wmOperator *op) } RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis); WM_operator_name_call(C, "TRANSFORM_OT_rotate", WM_OP_INVOKE_DEFAULT, op->ptr); + //wm_operator_invoke(C, WM_operatortype_find("TRANSFORM_OT_rotate", 0), event, op->ptr, NULL); } } /* after transform, restore drawflags */ diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index 53cbfd208b6..6059d9d4697 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -381,23 +381,10 @@ static int transform_invoke(bContext *C, wmOperator *op, wmEvent *event) } } -#define P_MIRROR (1 << 0) -#define P_PROPORTIONAL (1 << 1) -#define P_AXIS (1 << 2) -#define P_SNAP (1 << 3) -#define P_GEO_SNAP (P_SNAP|(1 << 4)) -#define P_ALIGN_SNAP (P_GEO_SNAP|(1 << 5)) -#define P_CONSTRAINT (1 << 6) - - void Transform_Properties(struct wmOperatorType *ot, int flags) { PropertyRNA *prop; - // Add confirm method all the time - prop = RNA_def_boolean(ot->srna, "release_confirm", 0, "Confirm on Release", "Confirm operation when releasing button"); - RNA_def_property_flag(prop, PROP_HIDDEN); - if (flags & P_AXIS) { prop= RNA_def_property(ot->srna, "axis", PROP_FLOAT, PROP_DIRECTION); @@ -440,6 +427,10 @@ void Transform_Properties(struct wmOperatorType *ot, int flags) } } } + + // Add confirm method all the time. At the end because it's not really that important and should be hidden + prop = RNA_def_boolean(ot->srna, "release_confirm", 0, "Confirm on Release", "Always confirm operation when releasing button"); + //RNA_def_property_flag(prop, PROP_HIDDEN); } void TRANSFORM_OT_translate(struct wmOperatorType *ot) diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index e0a32d9ce6c..d5a2b504962 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -408,7 +408,7 @@ extern UserDef U; /* from blenkernel blender.c */ #define USER_ADD_EDITMODE (1 << 18) #define USER_ADD_VIEWALIGNED (1 << 19) #define USER_RELPATHS (1 << 20) -#define USER_DRAGIMMEDIATE (1 << 21) +#define USER_RELEASECONFIRM (1 << 21) #define USER_SCRIPT_AUTOEXEC_DISABLE (1 << 22) #define USER_FILENOUI (1 << 23) #define USER_NONEGFRAMES (1 << 24) diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 68e6c20d8aa..6b78ddaeae1 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -2085,8 +2085,8 @@ static void rna_def_userdef_edit(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Enter Edit Mode", "Enter Edit Mode automatically after adding a new object"); prop= RNA_def_property(srna, "drag_immediately", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_DRAGIMMEDIATE); - RNA_def_property_ui_text(prop, "Drag Immediately", "Moving things with a mouse drag doesn't require a click to confirm (Best for tablet users)"); + RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_RELEASECONFIRM); + RNA_def_property_ui_text(prop, "Release confirm", "Moving things with a mouse drag confirms when releasing the button"); /* Undo */ prop= RNA_def_property(srna, "undo_steps", PROP_INT, PROP_NONE); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index da1f71f49da..19a7ae38b7f 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -551,7 +551,7 @@ static void wm_region_mouse_co(bContext *C, wmEvent *event) } } -static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerRNA *properties, ReportList *reports) +int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerRNA *properties, ReportList *reports) { wmWindowManager *wm= CTX_wm_manager(C); int retval= OPERATOR_PASS_THROUGH; @@ -1930,7 +1930,8 @@ void WM_event_add_mousemove(bContext *C) int WM_modal_tweak_exit(wmEvent *evt, int tweak_event) { /* user preset or keymap? dunno... */ - int tweak_modal= (U.flag & USER_DRAGIMMEDIATE)==0; + // XXX WTH is this? + int tweak_modal= (U.flag & USER_RELEASECONFIRM)==0; switch(tweak_event) { case EVT_TWEAK_L: |