summaryrefslogtreecommitdiff
path: root/java/org/gnu/emacs/EmacsWindow.java
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2024-05-12 15:46:38 +0800
committerPo Lu <luangruo@yahoo.com>2024-05-12 15:49:53 +0800
commitea98a6af2f30eccfed3e152149c6a039bd16ff33 (patch)
tree816f1b65c38f4546e71d6f8a2074fd3380ba9d08 /java/org/gnu/emacs/EmacsWindow.java
parentaf6df8e0454f3f51d3855683216dfd12843e6959 (diff)
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.
Diffstat (limited to 'java/org/gnu/emacs/EmacsWindow.java')
-rw-r--r--java/org/gnu/emacs/EmacsWindow.java43
1 files changed, 33 insertions, 10 deletions
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