diff options
| author | Po Lu | 2023-08-30 10:07:49 +0800 |
|---|---|---|
| committer | Po Lu | 2023-08-30 10:07:49 +0800 |
| commit | 297ccd967f24e37bc51c057da43c862291a55ddd (patch) | |
| tree | 35c7bca464ae2fbf23c46176a698483937ddd51d /java | |
| parent | 2909ef8d3d73518525ce6a8a3e4f984575300f3b (diff) | |
| download | emacs-297ccd967f24e37bc51c057da43c862291a55ddd.tar.gz emacs-297ccd967f24e37bc51c057da43c862291a55ddd.zip | |
Facilitate typing `C-SPC' on Android
* doc/emacs/android.texi (Android Windowing): Mention C-SPC
interception and how it may be disabled.
* java/org/gnu/emacs/EmacsNative.java (shouldForwardCtrlSpace):
New function.
* java/org/gnu/emacs/EmacsView.java (onKeyPreIme): New function.
If the provided key code is SPC and the event's modifier key
mask contains ControlMask, relay it directly to onKeyDown.
* java/org/gnu/emacs/EmacsWindow.java (eventModifiers): Export
and make static.
* src/android.c (shouldForwardCtrlSpace): New function.
* src/androidfns.c (syms_of_androidfns)
<android_intercept_control_space>: New defvar.
Diffstat (limited to 'java')
| -rw-r--r-- | java/org/gnu/emacs/EmacsNative.java | 4 | ||||
| -rw-r--r-- | java/org/gnu/emacs/EmacsView.java | 20 | ||||
| -rw-r--r-- | java/org/gnu/emacs/EmacsWindow.java | 2 |
3 files changed, 25 insertions, 1 deletions
diff --git a/java/org/gnu/emacs/EmacsNative.java b/java/org/gnu/emacs/EmacsNative.java index fae0ba98f86..a4b45aafbc1 100644 --- a/java/org/gnu/emacs/EmacsNative.java +++ b/java/org/gnu/emacs/EmacsNative.java | |||
| @@ -196,6 +196,10 @@ public final class EmacsNative | |||
| 196 | KEYCODE_VOLUME_MUTE should be forwarded to Emacs. */ | 196 | KEYCODE_VOLUME_MUTE should be forwarded to Emacs. */ |
| 197 | public static native boolean shouldForwardMultimediaButtons (); | 197 | public static native boolean shouldForwardMultimediaButtons (); |
| 198 | 198 | ||
| 199 | /* Return whether KEYCODE_SPACE combined with META_CTRL_MASK should | ||
| 200 | be prevented from reaching the system input method. */ | ||
| 201 | public static native boolean shouldForwardCtrlSpace (); | ||
| 202 | |||
| 199 | /* Initialize the current thread, by blocking signals that do not | 203 | /* Initialize the current thread, by blocking signals that do not |
| 200 | interest it. */ | 204 | interest it. */ |
| 201 | public static native void setupSystemThread (); | 205 | public static native void setupSystemThread (); |
diff --git a/java/org/gnu/emacs/EmacsView.java b/java/org/gnu/emacs/EmacsView.java index 5a4bcbaa005..04c3d824027 100644 --- a/java/org/gnu/emacs/EmacsView.java +++ b/java/org/gnu/emacs/EmacsView.java | |||
| @@ -472,6 +472,26 @@ public final class EmacsView extends ViewGroup | |||
| 472 | 472 | ||
| 473 | @Override | 473 | @Override |
| 474 | public boolean | 474 | public boolean |
| 475 | onKeyPreIme (int keyCode, KeyEvent event) | ||
| 476 | { | ||
| 477 | /* Several Android systems intercept key events representing | ||
| 478 | C-SPC. Avert this by detecting C-SPC events here and relaying | ||
| 479 | them directly to onKeyDown. | ||
| 480 | |||
| 481 | Make this optional though, since some input methods also | ||
| 482 | leverage C-SPC as a shortcut for switching languages. */ | ||
| 483 | |||
| 484 | if ((keyCode == KeyEvent.KEYCODE_SPACE | ||
| 485 | && (window.eventModifiers (event) | ||
| 486 | & KeyEvent.META_CTRL_MASK) != 0) | ||
| 487 | && !EmacsNative.shouldForwardCtrlSpace ()) | ||
| 488 | return onKeyDown (keyCode, event); | ||
| 489 | |||
| 490 | return super.onKeyPreIme (keyCode, event); | ||
| 491 | } | ||
| 492 | |||
| 493 | @Override | ||
| 494 | public boolean | ||
| 475 | onKeyDown (int keyCode, KeyEvent event) | 495 | onKeyDown (int keyCode, KeyEvent event) |
| 476 | { | 496 | { |
| 477 | if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP | 497 | if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP |
diff --git a/java/org/gnu/emacs/EmacsWindow.java b/java/org/gnu/emacs/EmacsWindow.java index aff5046b22e..3738376a6f4 100644 --- a/java/org/gnu/emacs/EmacsWindow.java +++ b/java/org/gnu/emacs/EmacsWindow.java | |||
| @@ -576,7 +576,7 @@ public final class EmacsWindow extends EmacsHandleObject | |||
| 576 | input EVENT. Replace bits corresponding to Left or Right keys | 576 | input EVENT. Replace bits corresponding to Left or Right keys |
| 577 | with their corresponding general modifier bits. */ | 577 | with their corresponding general modifier bits. */ |
| 578 | 578 | ||
| 579 | private int | 579 | public static int |
| 580 | eventModifiers (KeyEvent event) | 580 | eventModifiers (KeyEvent event) |
| 581 | { | 581 | { |
| 582 | int state; | 582 | int state; |