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.
This commit is contained in:
parent
af6df8e045
commit
ea98a6af2f
2 changed files with 57 additions and 31 deletions
|
@ -505,42 +505,45 @@ else if (child.getVisibility () != GONE)
|
|||
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
|
||||
|
|
|
@ -633,8 +633,8 @@ private static class Coordinate
|
|||
|
||||
|
||||
/* 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 @@ private static class Coordinate
|
|||
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 @@ private static class Coordinate
|
|||
/* 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 @@ private static class Coordinate
|
|||
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 @@ private static class Coordinate
|
|||
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 @@ private static class Coordinate
|
|||
/* 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 @@ private static class Coordinate
|
|||
|
||||
lastQuitKeyRelease = time;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void
|
||||
|
|
Loading…
Add table
Reference in a new issue