aboutsummaryrefslogtreecommitdiffstats
path: root/java/org
diff options
context:
space:
mode:
authorPo Lu2023-08-30 10:07:49 +0800
committerPo Lu2023-08-30 10:07:49 +0800
commit297ccd967f24e37bc51c057da43c862291a55ddd (patch)
tree35c7bca464ae2fbf23c46176a698483937ddd51d /java/org
parent2909ef8d3d73518525ce6a8a3e4f984575300f3b (diff)
downloademacs-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/org')
-rw-r--r--java/org/gnu/emacs/EmacsNative.java4
-rw-r--r--java/org/gnu/emacs/EmacsView.java20
-rw-r--r--java/org/gnu/emacs/EmacsWindow.java2
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;