[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
feature/android 66783af5541: Update Android port
From: |
Po Lu |
Subject: |
feature/android 66783af5541: Update Android port |
Date: |
Sun, 4 Jun 2023 22:46:12 -0400 (EDT) |
branch: feature/android
commit 66783af554176c68cb58726aeff4ae6a23224234
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Update Android port
* java/org/gnu/emacs/EmacsNative.java (EmacsNative): New
function clearInputFlags.
* java/org/gnu/emacs/EmacsView.java (onCreateInputConnection):
Stop reporting changes after a new input method connection is
established.
* src/androidterm.c (android_handle_ime_event): Implement that
change.
(JNICALL): New function.
---
java/org/gnu/emacs/EmacsNative.java | 1 +
java/org/gnu/emacs/EmacsView.java | 8 +++----
src/androidterm.c | 48 ++++++++++++++++++++++++++++++++++++-
3 files changed, 52 insertions(+), 5 deletions(-)
diff --git a/java/org/gnu/emacs/EmacsNative.java
b/java/org/gnu/emacs/EmacsNative.java
index f03736fe614..cb1c6caa79a 100644
--- a/java/org/gnu/emacs/EmacsNative.java
+++ b/java/org/gnu/emacs/EmacsNative.java
@@ -221,6 +221,7 @@ public final class EmacsNative
int flags);
public static native void requestSelectionUpdate (short window);
public static native void requestCursorUpdates (short window, int mode);
+ public static native void clearInputFlags (short window);
/* Return the current value of the selection, or -1 upon
diff --git a/java/org/gnu/emacs/EmacsView.java
b/java/org/gnu/emacs/EmacsView.java
index c223dfa7911..a78dec08839 100644
--- a/java/org/gnu/emacs/EmacsView.java
+++ b/java/org/gnu/emacs/EmacsView.java
@@ -627,6 +627,10 @@ public final class EmacsView extends ViewGroup
return null;
}
+ /* Reset flags set by the previous input method. */
+
+ EmacsNative.clearInputFlags (window.handle);
+
/* Obtain the current position of point and set it as the
selection. Don't do this under one specific situation: if
`android_update_ic' is being called in the main thread, trying
@@ -663,10 +667,6 @@ public final class EmacsView extends ViewGroup
if (inputConnection == null)
inputConnection = new EmacsInputConnection (this);
- else
- /* Reset the composing region, in case there is still composing
- text. */
- inputConnection.finishComposingText ();
/* Return the input connection. */
return inputConnection;
diff --git a/src/androidterm.c b/src/androidterm.c
index d8a8b4c2d71..afa10a1b94b 100644
--- a/src/androidterm.c
+++ b/src/androidterm.c
@@ -675,6 +675,7 @@ static void
android_handle_ime_event (union android_event *event, struct frame *f)
{
Lisp_Object text UNINIT;
+ struct android_output *output;
/* First, decode the text if necessary. */
@@ -707,8 +708,23 @@ android_handle_ime_event (union android_event *event,
struct frame *f)
break;
case ANDROID_IME_FINISH_COMPOSING_TEXT:
+
+ if (event->ime.length == 2)
+ {
+ output = FRAME_ANDROID_OUTPUT (f);
+
+ /* A new input method has connected to Emacs. Stop
+ reporting changes that the previous input method has
+ asked to monitor. */
+
+ output->extracted_text_flags = 0;
+ output->extracted_text_token = 0;
+ output->extracted_text_hint = 0;
+ output->need_cursor_updates = false;
+ }
+
finish_composing_text (f, event->ime.counter,
- event->ime.length);
+ event->ime.length == 1);
break;
case ANDROID_IME_SET_COMPOSING_TEXT:
@@ -5580,6 +5596,36 @@ NATIVE_NAME (requestCursorUpdates) (JNIEnv *env, jobject
object,
android_write_event (&event);
}
+/* Notice that a new input method connection has been initialized and
+ clear cursor update requests, extracted text requests, and the
+ composing region. */
+
+JNIEXPORT void JNICALL
+NATIVE_NAME (clearInputFlags) (JNIEnv *env, jobject object,
+ jshort window)
+{
+ JNI_STACK_ALIGNMENT_PROLOGUE;
+
+ union android_event event;
+
+ event.ime.type = ANDROID_INPUT_METHOD;
+ event.ime.serial = ++event_serial;
+ event.ime.window = window;
+ event.ime.operation = ANDROID_IME_FINISH_COMPOSING_TEXT;
+ event.ime.start = 0;
+ event.ime.end = 0;
+
+ /* This value of `length' means that updates to the cursor position
+ and extracted text should not be reported anymore. */
+
+ event.ime.length = 2;
+ event.ime.position = 0;
+ event.ime.text = NULL;
+ event.ime.counter = ++edit_counter;
+
+ android_write_event (&event);
+}
+
#ifdef __clang__
#pragma clang diagnostic pop
#else
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- feature/android 66783af5541: Update Android port,
Po Lu <=