SDL: Merge commit '209f457ea4eed6a2a3816f42049a17101c049d9c' into main

From 209f457ea4eed6a2a3816f42049a17101c049d9c Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Fri, 1 Jul 2022 10:13:19 -0700
Subject: [PATCH] Generate backspaces for the text we're going to replace when
 committing text

---
 .../main/java/org/libsdl/app/SDLActivity.java | 23 +++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
index 8ad4f173faa..3f0752f164d 100644
--- a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
+++ b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java
@@ -2356,6 +2356,29 @@ public boolean sendKeyEvent(KeyEvent event) {
     @Override
     public boolean commitText(CharSequence text, int newCursorPosition) {
 
+        /* Generate backspaces for the text we're going to replace */
+        final Editable content = getEditable();
+        if (content != null) {
+            int a = getComposingSpanStart(content);
+            int b = getComposingSpanEnd(content);
+            if (a == -1 || b == -1) {
+                a = Selection.getSelectionStart(content);
+                b = Selection.getSelectionEnd(content);
+            }
+            if (a < 0) a = 0;
+            if (b < 0) b = 0;
+            if (b < a) {
+                int tmp = a;
+                a = b;
+                b = tmp;
+            }
+            int backspaces = (b - a);
+
+            for (int i = 0; i < backspaces; i++) {
+                nativeGenerateScancodeForUnichar('\b');
+            }
+        }
+
         for (int i = 0; i < text.length(); i++) {
             char c = text.charAt(i);
             if (c == '\n') {