From 4f3f16c39e3424dff591833bc0a19f9584a2d08f Mon Sep 17 00:00:00 2001 From: sspanak Date: Thu, 24 Apr 2025 11:51:33 +0300 Subject: [PATCH] fixed confusing Backspace behavior when deleting selected or composed text --- .../main/java/io/github/sspanak/tt9/ime/TypingHandler.java | 5 +++-- .../java/io/github/sspanak/tt9/ime/helpers/TextField.java | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java index 81cf0c87..ef740458 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java @@ -127,7 +127,8 @@ public abstract class TypingHandler extends KeyPadHandler { return true; } - if (repeat == 0 && mInputMode.onBackspace()) { + boolean noTextSelection = textSelection.isEmpty(); // loading words after deleting selected text is confusing + if (repeat == 0 && mInputMode.onBackspace() && noTextSelection) { getSuggestions(null); } else { suggestionOps.commitCurrent(false, true); @@ -135,7 +136,7 @@ public abstract class TypingHandler extends KeyPadHandler { deleteText(settings.getBackspaceAcceleration() && repeat > 0); } - if (settings.getBackspaceRecomposing() && repeat == 0 && suggestionOps.isEmpty() && !DictionaryLoader.getInstance(this).isRunning()) { + if (settings.getBackspaceRecomposing() && repeat == 0 && noTextSelection && suggestionOps.isEmpty() && !DictionaryLoader.getInstance(this).isRunning()) { final String previousWord = mInputMode.recompose(); if (textField.recompose(previousWord)) { getSuggestions(previousWord); diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java index 041dd9b2..7b386712 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java @@ -138,6 +138,7 @@ public class TextField extends InputField { } if (isNonText) { + composingText = composingText.length() > 1 ? composingText.subSequence(0, composingText.length() - 1) : ""; sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL); return; } @@ -150,6 +151,7 @@ public class TextField extends InputField { } } + composingText = composingText.length() > numberOfChars ? composingText.subSequence(0, composingText.length() - numberOfChars) : ""; connection.deleteSurroundingText(numberOfChars, 0); }