diff --git a/web/src/engine/osk/src/input/gestures/browser/multitap.ts b/web/src/engine/osk/src/input/gestures/browser/multitap.ts index 7b7c3de33d..3f1d304df3 100644 --- a/web/src/engine/osk/src/input/gestures/browser/multitap.ts +++ b/web/src/engine/osk/src/input/gestures/browser/multitap.ts @@ -77,6 +77,9 @@ export default class Multitap implements GestureHandler { case 'multitap-end': case 'simple-tap': return; + case 'modipress-multitap-lock-transition': + this.modipress?.setLocked(); + return; // Once a multitap starts, it's better to emit keys on keydown; that way, // if a user holds long, they get what they see if they decide to stop, // but also have time to decide if they want to continue to what's next. diff --git a/web/src/engine/osk/src/input/gestures/specsForLayout.ts b/web/src/engine/osk/src/input/gestures/specsForLayout.ts index 76acd496a7..4347c3d14e 100644 --- a/web/src/engine/osk/src/input/gestures/specsForLayout.ts +++ b/web/src/engine/osk/src/input/gestures/specsForLayout.ts @@ -219,7 +219,8 @@ export function gestureSetForLayout(layerGroup: OSKLayerGroup, params: GesturePa ModipressEndModel, ModipressMultitapTransitionModel, withKeySpecFiltering(modipressMultitapStartModel(params), 0), - modipressMultitapEndModel(params) + modipressMultitapEndModel(params), + modipressMultitapLockModel() ]; const defaultSet = [ @@ -1054,9 +1055,37 @@ export function modipressMultitapEndModel(params: GestureParams): GestureModel { + return { + id: 'modipress-multitap-lock-transition', + resolutionPriority: 5, + contacts: [ + // This exists as an intermediate state to transition from + // a modipress-multitap into a plain modipress without further + // multitap rota behavior. + { + model: { + ...InstantContactResolutionModel, + pathResolutionAction: 'resolve' // doesn't end the path; just lets it continue. + }, + } + ], + resolutionAction: { + type: 'chain', + next: 'modipress-end', + selectionMode: 'modipress', + item: 'none' + } + }; +} // #endregion \ No newline at end of file