From 6100186f738914e056a0dd9a025991610d7c2579 Mon Sep 17 00:00:00 2001 From: Helium314 Date: Sun, 5 Jan 2025 09:40:17 +0100 Subject: [PATCH] deal with keyboard layout changing between pressing and quickly releasing a key fixes #994 --- .../helium314/keyboard/keyboard/PointerTracker.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/helium314/keyboard/keyboard/PointerTracker.java b/app/src/main/java/helium314/keyboard/keyboard/PointerTracker.java index f47dc3ea6..e9f9c68e9 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/PointerTracker.java +++ b/app/src/main/java/helium314/keyboard/keyboard/PointerTracker.java @@ -1047,7 +1047,16 @@ public final class PointerTracker implements PointerTrackerQueue.Element, final boolean isInSlidingKeyInput = mIsInSlidingKeyInput; resetKeySelectionByDraggingFinger(); mIsDetectingGesture = false; - final Key currentKey = mCurrentKey; + final Key currentKey; + if (mKeyboardLayoutHasBeenChanged) { + // this is called when keyboard was changed shortly before releasing the key + // e.g. when the input field is cleared and shift is set to auto right before pressing the key, + // then we want to get the current key, and not the key from the old keyboard (bug report in #994) + currentKey = mKeyDetector.detectHitKey(x, y); + setReleasedKeyGraphics(mCurrentKey, true); // need to call this, otherwise preview popup will stay open + } else { + currentKey = mCurrentKey; + } mCurrentKey = null; final int currentRepeatingKeyCode = mCurrentRepeatingKeyCode; mCurrentRepeatingKeyCode = Constants.NOT_A_CODE;