diff --git a/web/src/engine/osk/src/input/gestures/browser/subkeyPopup.ts b/web/src/engine/osk/src/input/gestures/browser/subkeyPopup.ts index 3eb3a64644..8ad70cde60 100644 --- a/web/src/engine/osk/src/input/gestures/browser/subkeyPopup.ts +++ b/web/src/engine/osk/src/input/gestures/browser/subkeyPopup.ts @@ -35,6 +35,8 @@ export default class SubkeyPopup implements GestureHandler { private source: GestureSequence; private readonly gestureParams: GestureParams; + readonly shouldLockLayer: boolean = false; + constructor( source: GestureSequence, configChanger: ConfigChangeClosure, @@ -46,6 +48,10 @@ export default class SubkeyPopup implements GestureHandler { this.source = source; this.gestureParams = gestureParams; + if(vkbd.layerLocked) { + this.shouldLockLayer = true; + } + source.on('complete', () => { this.currentSelection?.key.highlight(false); this.clear(); diff --git a/web/src/engine/osk/src/visualKeyboard.ts b/web/src/engine/osk/src/visualKeyboard.ts index 9827374185..def7f75f6c 100644 --- a/web/src/engine/osk/src/visualKeyboard.ts +++ b/web/src/engine/osk/src/visualKeyboard.ts @@ -523,7 +523,16 @@ export default class VisualKeyboard extends EventEmitter implements Ke } // Once the best coord to use for fat-finger calculations has been determined: - keyResult = this.modelKeyClick(gestureStage.item, coord); + const shouldLockLayer = handlers && (handlers[0] instanceof SubkeyPopup) && handlers[0].shouldLockLayer; + try { + if(shouldLockLayer) { + this.lockLayer(true); + } + keyResult = this.modelKeyClick(gestureStage.item, coord); + } finally { + this.lockLayer(false); + } + } // Outside of passing keys along... the handling of later stages is delegated