From 2e7cfb86fef831b5024fa21430c76c6bf4e649db Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 6 Mar 2020 18:12:56 +1100 Subject: Keymap: ignore repeat events for transform actions Resolves T54297 --- source/blender/editors/transform/transform.c | 45 ++++++++++++++++++---------- 1 file changed, 30 insertions(+), 15 deletions(-) (limited to 'source/blender/editors') diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 253df915d8f..37cfa846657 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -1187,10 +1187,22 @@ int transformEvent(TransInfo *t, const wmEvent *event) /* else do non-mapped events */ else if (event->val == KM_PRESS) { switch (event->type) { + case ESCKEY: case RIGHTMOUSE: t->state = TRANS_CANCEL; handled = true; break; + + case SPACEKEY: + case PADENTER: + case RETKEY: + if (event->is_repeat) { + break; + } + t->state = TRANS_CONFIRM; + handled = true; + break; + /* enforce redraw of transform when modifiers are used */ case LEFTSHIFTKEY: case RIGHTSHIFTKEY: @@ -1198,12 +1210,6 @@ int transformEvent(TransInfo *t, const wmEvent *event) t->redraw |= TREDRAW_HARD; handled = true; break; - - case SPACEKEY: - t->state = TRANS_CONFIRM; - handled = true; - break; - case MIDDLEMOUSE: if ((t->flag & T_NO_CONSTRAINT) == 0) { /* exception for switching to dolly, or trackball, in camera view */ @@ -1240,16 +1246,10 @@ int transformEvent(TransInfo *t, const wmEvent *event) handled = true; } break; - case ESCKEY: - t->state = TRANS_CANCEL; - handled = true; - break; - case PADENTER: - case RETKEY: - t->state = TRANS_CONFIRM; - handled = true; - break; case GKEY: + if (event->is_repeat) { + break; + } /* only switch when... */ if (ELEM(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL)) { restoreTransObjects(t); @@ -1262,6 +1262,9 @@ int transformEvent(TransInfo *t, const wmEvent *event) } break; case SKEY: + if (event->is_repeat) { + break; + } /* only switch when... */ if (ELEM(t->mode, TFM_ROTATION, TFM_TRANSLATION, TFM_TRACKBALL)) { restoreTransObjects(t); @@ -1274,6 +1277,9 @@ int transformEvent(TransInfo *t, const wmEvent *event) } break; case RKEY: + if (event->is_repeat) { + break; + } /* only switch when... */ if (!(t->options & CTX_TEXTURE)) { if (ELEM(t->mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL, TFM_TRANSLATION)) { @@ -1294,6 +1300,9 @@ int transformEvent(TransInfo *t, const wmEvent *event) } break; case CKEY: + if (event->is_repeat) { + break; + } if (event->alt) { if (!(t->options & CTX_NO_PET)) { t->flag ^= T_PROP_CONNECTED; @@ -1305,6 +1314,9 @@ int transformEvent(TransInfo *t, const wmEvent *event) } break; case OKEY: + if (event->is_repeat) { + break; + } if (t->flag & T_PROP_EDIT && event->shift) { t->prop_mode = (t->prop_mode + 1) % PROP_MODE_MAX; calculatePropRatio(t); @@ -1362,6 +1374,9 @@ int transformEvent(TransInfo *t, const wmEvent *event) } break; case NKEY: + if (event->is_repeat) { + break; + } if (ELEM(t->mode, TFM_ROTATION)) { if ((t->flag & T_EDIT) && t->obedit_type == OB_MESH) { restoreTransObjects(t); -- cgit v1.2.3