From ea98a6af2f30eccfed3e152149c6a039bd16ff33 Mon Sep 17 00:00:00 2001 From: Po Lu Date: Sun, 12 May 2024 15:46:38 +0800 Subject: Additional changes to processing of Num Lock on Android * java/org/gnu/emacs/EmacsView.java (onKeyDown, onKeyMultiple) (onKeyDown): Disregard Num and Scroll Lock keys, and return value of window functions to the system. * java/org/gnu/emacs/EmacsWindow.java (eventModifiers): Return normalized meta state, not only those bits the system considers modifiers. (onKeyDown, onKeyUp): Ignore numpad keys to which no base characters are assigned, so that the system may generate the proper action keys instead. --- java/org/gnu/emacs/EmacsWindow.java | 43 ++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 10 deletions(-) (limited to 'java/org/gnu/emacs/EmacsWindow.java') diff --git a/java/org/gnu/emacs/EmacsWindow.java b/java/org/gnu/emacs/EmacsWindow.java index 6442f373736..f8dd8518af0 100644 --- a/java/org/gnu/emacs/EmacsWindow.java +++ b/java/org/gnu/emacs/EmacsWindow.java @@ -633,8 +633,8 @@ public final class EmacsWindow extends EmacsHandleObject /* Return the modifier mask associated with the specified keyboard - input EVENT. Replace bits corresponding to Left or Right keys - with their corresponding general modifier bits. */ + input EVENT. Replace bits representing Left or Right keys with + their corresponding general modifier bits. */ public static int eventModifiers (KeyEvent event) @@ -642,7 +642,7 @@ public final class EmacsWindow extends EmacsHandleObject int state; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) - state = event.getModifiers (); + state = KeyEvent.normalizeMetaState (event.getMetaState ()); else { /* Replace this with getMetaState and manual @@ -667,10 +667,10 @@ public final class EmacsWindow extends EmacsHandleObject /* event.getCharacters is used because older input methods still require it. */ @SuppressWarnings ("deprecation") - public void + public boolean onKeyDown (int keyCode, KeyEvent event) { - int state, state_1, extra_ignored; + int state, state_1, extra_ignored, unicode_char; long serial; String characters; @@ -686,7 +686,7 @@ public final class EmacsWindow extends EmacsHandleObject Deliver onKeyDown events in onKeyUp instead, so as not to navigate backwards during gesture navigation. */ - return; + return true; } state = eventModifiers (event); @@ -720,23 +720,36 @@ public final class EmacsWindow extends EmacsHandleObject state &= ~KeyEvent.META_ALT_MASK; } + unicode_char = getEventUnicodeChar (event, state_1); + + /* If a NUMPAD_ key is detected for which no character is returned, + return false without sending the key event, as this will prompt + the system to send an event with the corresponding action + key. */ + + if (keyCode >= KeyEvent.KEYCODE_NUMPAD_0 + && keyCode <= KeyEvent.KEYCODE_NUMPAD_RIGHT_PAREN + && unicode_char == 0) + return false; + synchronized (eventStrings) { serial = EmacsNative.sendKeyPress (this.handle, event.getEventTime (), state, keyCode, - getEventUnicodeChar (event, - state_1)); + unicode_char); characters = event.getCharacters (); if (characters != null && characters.length () > 1) saveUnicodeString ((int) serial, characters); } + + return true; } - public void + public boolean onKeyUp (int keyCode, KeyEvent event) { int state, state_1, unicode_char, extra_ignored; @@ -781,12 +794,20 @@ public final class EmacsWindow extends EmacsHandleObject /* If the key press's been canceled, return immediately. */ if ((event.getFlags () & KeyEvent.FLAG_CANCELED) != 0) - return; + return true; /* Dispatch the key press event that was deferred till now. */ EmacsNative.sendKeyPress (this.handle, event.getEventTime (), state, keyCode, unicode_char); } + /* If a NUMPAD_ key is detected for which no character is returned, + return false without sending the key event, as this will prompt + the system to send an event with the corresponding action + key. */ + else if (keyCode >= KeyEvent.KEYCODE_NUMPAD_0 + && keyCode <= KeyEvent.KEYCODE_NUMPAD_RIGHT_PAREN + && unicode_char == 0) + return false; EmacsNative.sendKeyRelease (this.handle, event.getEventTime (), state, keyCode, unicode_char); @@ -804,6 +825,8 @@ public final class EmacsWindow extends EmacsHandleObject lastQuitKeyRelease = time; } + + return true; } public void -- cgit v1.3