summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/org/gnu/emacs/EmacsView.java45
-rw-r--r--java/org/gnu/emacs/EmacsWindow.java43
2 files changed, 57 insertions, 31 deletions
diff --git a/java/org/gnu/emacs/EmacsView.java b/java/org/gnu/emacs/EmacsView.java
index 977ad90310d..074e7242540 100644
--- a/java/org/gnu/emacs/EmacsView.java
+++ b/java/org/gnu/emacs/EmacsView.java
@@ -505,42 +505,45 @@ public final class EmacsView extends ViewGroup
public boolean
onKeyDown (int keyCode, KeyEvent event)
{
- if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP
- || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
- || keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)
- && !EmacsNative.shouldForwardMultimediaButtons ())
- return false;
+ if (((keyCode == KeyEvent.KEYCODE_VOLUME_UP
+ || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
+ || keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)
+ && !EmacsNative.shouldForwardMultimediaButtons ())
+ || keyCode == KeyEvent.KEYCODE_SCROLL_LOCK
+ || keyCode == KeyEvent.KEYCODE_NUM_LOCK)
+ return super.onKeyDown (keyCode, event);
- window.onKeyDown (keyCode, event);
- return true;
+ return window.onKeyDown (keyCode, event);
}
@Override
public boolean
onKeyMultiple (int keyCode, int repeatCount, KeyEvent event)
{
- if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP
- || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
- || keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)
- && !EmacsNative.shouldForwardMultimediaButtons ())
- return false;
+ if (((keyCode == KeyEvent.KEYCODE_VOLUME_UP
+ || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
+ || keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)
+ && !EmacsNative.shouldForwardMultimediaButtons ())
+ || keyCode == KeyEvent.KEYCODE_SCROLL_LOCK
+ || keyCode == KeyEvent.KEYCODE_NUM_LOCK)
+ return super.onKeyMultiple (keyCode, repeatCount, event);
- window.onKeyDown (keyCode, event);
- return true;
+ return window.onKeyDown (keyCode, event);
}
@Override
public boolean
onKeyUp (int keyCode, KeyEvent event)
{
- if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP
- || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
- || keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)
- && !EmacsNative.shouldForwardMultimediaButtons ())
- return false;
+ if (((keyCode == KeyEvent.KEYCODE_VOLUME_UP
+ || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
+ || keyCode == KeyEvent.KEYCODE_VOLUME_MUTE)
+ && !EmacsNative.shouldForwardMultimediaButtons ())
+ || keyCode == KeyEvent.KEYCODE_SCROLL_LOCK
+ || keyCode == KeyEvent.KEYCODE_NUM_LOCK)
+ return super.onKeyUp (keyCode, event);
- window.onKeyUp (keyCode, event);
- return true;
+ return window.onKeyUp (keyCode, event);
}
@Override
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