]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve compatibility with Android's default text editor
authorPo Lu <luangruo@yahoo.com>
Wed, 22 May 2024 14:00:02 +0000 (22:00 +0800)
committerEshel Yaron <me@eshelyaron.com>
Thu, 23 May 2024 08:30:03 +0000 (10:30 +0200)
* java/org/gnu/emacs/EmacsView.java (showOnScreenKeyboard):
Request a selection update if `inputConnection' has been
established, to more closely emulate the OS text editing widget.
(onCreateInputConnection) [EmacsService.DEBUG_IC]: Print current
selection values before reporting them.

(cherry picked from commit 70effed88df2e99287cfdabb924854f69ed668e2)

java/org/gnu/emacs/EmacsView.java

index 074e7242540ceac93c344c21cba8efca104ec87d..db270b796e83c236b6e1df11936994949ed412e0 100644 (file)
@@ -45,6 +45,8 @@ import android.graphics.Paint;
 import android.os.Build;
 import android.util.Log;
 
+import java.util.Arrays;
+
 /* This is an Android view which has a back and front buffer.  When
    swapBuffers is called, the back buffer is swapped to the front
    buffer, and any damage is invalidated.  frontBitmap and backBitmap
@@ -775,6 +777,15 @@ public final class EmacsView extends ViewGroup
 
     imManager.showSoftInput (this, 0);
     isCurrentlyTextEditor = true;
+
+    /* The OS text editing widget unconditionally reports the current
+       values of the selection to the input method after calls to
+       showSoftInput, which is redundant if inputConnection exists but
+       is now relied upon in such circumstances by the OS's default
+       input method, and must therefore be faithfully reproduced on our
+       part.  */
+    if (inputConnection != null)
+      EmacsNative.requestSelectionUpdate (window.handle);
   }
 
   public void
@@ -831,6 +842,12 @@ public final class EmacsView extends ViewGroup
 
     selection = EmacsService.viewGetSelection (window.handle);
 
+    if (EmacsService.DEBUG_IC)
+      Log.d (TAG, ("onCreateInputConnection: "
+                  + (selection != null
+                     ? Arrays.toString (selection)
+                     : "(unavailable)")));
+
     if (selection == null)
       {
        /* If the selection could not be obtained, return 0 by 0.