diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2020-11-30 19:11:46 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2020-11-30 20:50:35 +0300 |
commit | c0677b662f4b13429c0738b99ace85403385ff38 (patch) | |
tree | 7a7c069bd1da2d6c587df4d5126b0d76ed872929 /source/blender/editors/transform/transform_generics.c | |
parent | 3bdc42f97a837766aec2bcd57917ef631570304f (diff) |
Fix T83177: Industry Compatible keymap: MMB-dragging to transform engages axis-constraining on release
Release confirm did not consider modal keymap events.
Diffstat (limited to 'source/blender/editors/transform/transform_generics.c')
-rw-r--r-- | source/blender/editors/transform/transform_generics.c | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 5b41f6b51bf..27346c9e974 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -593,18 +593,60 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve transform_orientations_current_set(t, (t->con.mode & CON_APPLY) ? 2 : 0); } + if (event) { + t->release_confirm_event_type = WM_userdef_event_type_from_keymap_type(event->type); + t->is_launch_event_tweak = ISTWEAK(event->type); + + /* XXX Remove this when wm_operator_call_internal doesn't use window->eventstate + * (which can have type = 0) */ + /* For gizmo only, so assume LEFTMOUSE. */ + if (t->release_confirm_event_type == 0) { + t->release_confirm_event_type = LEFTMOUSE; + } + } + else { + /* Needed to translate tweak events to mouse buttons. */ + t->release_confirm_event_type = -1; + } + + t->release_confirm_event_val = -2; + if (op && ((prop = RNA_struct_find_property(op->ptr, "release_confirm")) && RNA_property_is_set(op->ptr, prop))) { if (RNA_property_boolean_get(op->ptr, prop)) { t->flag |= T_RELEASE_CONFIRM; + t->release_confirm_event_val = KM_RELEASE; } } else { /* Release confirms preference should not affect node editor (T69288, T70504). */ - if (ISMOUSE(t->launch_event) && + if (ISMOUSE(t->release_confirm_event_type) && ((U.flag & USER_RELEASECONFIRM) || (t->spacetype == SPACE_NODE))) { /* Global "release confirm" on mouse bindings */ t->flag |= T_RELEASE_CONFIRM; + t->release_confirm_event_val = KM_RELEASE; + } + } + + if (op && event) { + /* Keymap for shortcut header prints. */ + t->keymap = WM_keymap_active(CTX_wm_manager(C), op->type->modalkeymap); + + /* Stupid code to have Relase confirm and Ctrl-Click on gizmo work ok. */ + wmKeyMapItem *kmi = WM_event_match_modal_keymap_item(t->keymap, op, event); + if (kmi) { + if ((t->flag & T_RELEASE_CONFIRM) && (event->val == KM_PRESS) && (kmi->val != KM_PRESS)) { + t->release_confirm_event_type = EVT_MODAL_MAP; + t->release_confirm_event_val = kmi->propvalue; + } + + if ((kmi->propvalue == TFM_MODAL_SNAP_INV_ON) && + ELEM(t->mode, TFM_TRANSLATION, TFM_ROTATION, TFM_RESIZE)) { + /* Do this only for translation/rotation/resize because only these + * modes are available from gizmo and doing such check could + * lead to keymap conflicts for other modes (see T31584) */ + t->modifiers |= MOD_SNAP_INVERT; + } } } |