From db8f7ed7f652c114e606de423e5094b4cefe49e2 Mon Sep 17 00:00:00 2001 From: Po Lu Date: Sat, 27 Apr 2024 10:47:12 +0800 Subject: Enable customization of the quit key on Android * doc/emacs/android.texi (Android Windowing): * doc/emacs/input.texi (On-Screen Keyboards): Document various tidbits related to the quit key. * java/org/gnu/emacs/EmacsNative.java (getQuitKeycode): New function. * java/org/gnu/emacs/EmacsWindow.java (EmacsWindow): Rename `lastVolumeButtonRelease' to `lastQuitKeyRelease'. (onKeyUp): Treat value returned by getQuitKeycode as the quit key rather than mandate KEYCODE_VOLUME_DOWN. * src/android.c (getQuitKeycode): Implement new function. * src/androidterm.c (syms_of_androidterm) : New variable. --- java/org/gnu/emacs/EmacsNative.java | 4 ++++ java/org/gnu/emacs/EmacsWindow.java | 17 +++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) (limited to 'java') diff --git a/java/org/gnu/emacs/EmacsNative.java b/java/org/gnu/emacs/EmacsNative.java index 9b3e60e1a84..acf9e4b204b 100644 --- a/java/org/gnu/emacs/EmacsNative.java +++ b/java/org/gnu/emacs/EmacsNative.java @@ -228,6 +228,10 @@ public final class EmacsNative be prevented from reaching the system input method. */ public static native boolean shouldForwardCtrlSpace (); + /* Return the keycode repeated activation of which should signal + quit. */ + public static native int getQuitKeycode (); + /* Initialize the current thread, by blocking signals that do not interest it. */ public static native void setupSystemThread (); diff --git a/java/org/gnu/emacs/EmacsWindow.java b/java/org/gnu/emacs/EmacsWindow.java index 911e082144e..961292af527 100644 --- a/java/org/gnu/emacs/EmacsWindow.java +++ b/java/org/gnu/emacs/EmacsWindow.java @@ -136,10 +136,10 @@ public final class EmacsWindow extends EmacsHandleObject there is no such window manager. */ private WindowManager windowManager; - /* The time of the last KEYCODE_VOLUME_DOWN release. This is used - to quit Emacs upon two rapid clicks of the volume down - button. */ - private long lastVolumeButtonRelease; + /* The time of the last release of the quit keycode, generally + KEYCODE_VOLUME_DOWN. This is used to signal quit upon two rapid + presses of such key. */ + private long lastQuitKeyRelease; /* Linked list of character strings which were recently sent as events. */ @@ -790,15 +790,12 @@ public final class EmacsWindow extends EmacsHandleObject if ((event.getFlags () & KeyEvent.FLAG_CANCELED) != 0) return; - - EmacsNative.sendKeyPress (this.handle, event.getEventTime (), - state, keyCode, unicode_char); } EmacsNative.sendKeyRelease (this.handle, event.getEventTime (), state, keyCode, unicode_char); - if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) + if (keyCode == EmacsNative.getQuitKeycode ()) { /* Check if this volume down press should quit Emacs. Most Android devices have no physical keyboard, so it @@ -806,10 +803,10 @@ public final class EmacsWindow extends EmacsHandleObject time = event.getEventTime (); - if (time - lastVolumeButtonRelease < 350) + if (time - lastQuitKeyRelease < 350) EmacsNative.quit (); - lastVolumeButtonRelease = time; + lastQuitKeyRelease = time; } } -- cgit v1.2.1