Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGermano Cavalcante <germano.costa@ig.com.br>2020-11-30 19:11:46 +0300
committerGermano Cavalcante <germano.costa@ig.com.br>2020-11-30 20:50:35 +0300
commitc0677b662f4b13429c0738b99ace85403385ff38 (patch)
tree7a7c069bd1da2d6c587df4d5126b0d76ed872929 /source/blender/editors/transform/transform.c
parent3bdc42f97a837766aec2bcd57917ef631570304f (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.c')
-rw-r--r--source/blender/editors/transform/transform.c59
1 files changed, 9 insertions, 50 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index bba0b750d0c..356ad8643f8 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -818,9 +818,15 @@ int transformEvent(TransInfo *t, const wmEvent *event)
t->redraw |= handleSnapping(t, event);
handled = true;
}
- /* handle modal keymap first */
- /* enforce redraw of transform when modifiers are used */
+ else if (event->val == t->release_confirm_event_val &&
+ event->type == t->release_confirm_event_type) {
+ /* Confirm transform if launch key is released after mouse move. */
+ BLI_assert(t->flag & T_RELEASE_CONFIRM);
+ t->state = TRANS_CONFIRM;
+ }
else if (event->type == EVT_MODAL_MAP) {
+ /* Handle modal keymap first. */
+ /* Enforce redraw of transform when modifiers are used */
switch (event->val) {
case TFM_MODAL_CANCEL:
t->state = TRANS_CANCEL;
@@ -1122,8 +1128,8 @@ int transformEvent(TransInfo *t, const wmEvent *event)
break;
}
}
- /* Else do non-mapped events. */
else if (event->val == KM_PRESS) {
+ /* Do non-mapped events. */
switch (event->type) {
case EVT_CKEY:
if (event->is_repeat) {
@@ -1211,11 +1217,6 @@ int transformEvent(TransInfo *t, const wmEvent *event)
}
break;
}
-
- /* confirm transform if launch key is released after mouse move */
- if ((t->flag & T_RELEASE_CONFIRM) && event->type == t->launch_event) {
- t->state = TRANS_CONFIRM;
- }
}
/* if we change snap options, get the unsnapped values back */
@@ -1687,17 +1688,6 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
t->mode = mode;
- /* Needed to translate tweak events to mouse buttons. */
- t->launch_event = event ? WM_userdef_event_type_from_keymap_type(event->type) : -1;
- t->is_launch_event_tweak = event ? ISTWEAK(event->type) : false;
-
- /* 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->launch_event == 0) {
- t->launch_event = LEFTMOUSE;
- }
-
unit_m3(t->spacemtx);
initTransInfo(C, t, op, event);
@@ -1771,37 +1761,6 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
}
}
- if (event) {
- /* keymap for shortcut header prints */
- t->keymap = WM_keymap_active(CTX_wm_manager(C), op->type->modalkeymap);
-
- /* Stupid code to have Ctrl-Click on gizmo work ok.
- *
- * 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)
- */
- if (ELEM(mode, TFM_TRANSLATION, TFM_ROTATION, TFM_RESIZE)) {
- wmKeyMapItem *kmi;
-
- for (kmi = t->keymap->items.first; kmi; kmi = kmi->next) {
- if (kmi->flag & KMI_INACTIVE) {
- continue;
- }
-
- if (kmi->propvalue == TFM_MODAL_SNAP_INV_ON && kmi->val == KM_PRESS) {
- if ((ELEM(kmi->type, EVT_LEFTCTRLKEY, EVT_RIGHTCTRLKEY) && event->ctrl) ||
- (ELEM(kmi->type, EVT_LEFTSHIFTKEY, EVT_RIGHTSHIFTKEY) && event->shift) ||
- (ELEM(kmi->type, EVT_LEFTALTKEY, EVT_RIGHTALTKEY) && event->alt) ||
- ((kmi->type == EVT_OSKEY) && event->oskey)) {
- t->modifiers |= MOD_SNAP_INVERT;
- }
- break;
- }
- }
- }
- }
-
initSnapping(t, op); /* Initialize snapping data AFTER mode flags */
initSnapSpatial(t, t->snap_spatial);