aboutsummaryrefslogtreecommitdiffstats
path: root/java/org/gnu
diff options
context:
space:
mode:
authorPo Lu2023-11-25 10:40:13 +0800
committerPo Lu2023-11-25 10:41:09 +0800
commit207ee7f9880c72920d4b323d7d6ed16544ba948b (patch)
tree8cd567aa282159cb0904b812d093ed403374d891 /java/org/gnu
parent505edceaf44a9d4e072975473170a674b949e504 (diff)
downloademacs-207ee7f9880c72920d4b323d7d6ed16544ba948b.tar.gz
emacs-207ee7f9880c72920d4b323d7d6ed16544ba948b.zip
Dismiss Android Back key events that are canceled
* java/org/gnu/emacs/EmacsWindow.java (onKeyDown): Disregard KEYCODE_BACK events. (onKeyUp): If the event is KEYCODE_BACK, deliver the disregarded key press event, unless FLAG_CANCELED is set.
Diffstat (limited to 'java/org/gnu')
-rw-r--r--java/org/gnu/emacs/EmacsWindow.java37
1 files changed, 31 insertions, 6 deletions
diff --git a/java/org/gnu/emacs/EmacsWindow.java b/java/org/gnu/emacs/EmacsWindow.java
index 013f09cb756..7d161fdcf88 100644
--- a/java/org/gnu/emacs/EmacsWindow.java
+++ b/java/org/gnu/emacs/EmacsWindow.java
@@ -648,6 +648,21 @@ public final class EmacsWindow extends EmacsHandleObject
648 long serial; 648 long serial;
649 String characters; 649 String characters;
650 650
651 if (keyCode == KeyEvent.KEYCODE_BACK)
652 {
653 /* New Android systems display Back navigation buttons on a
654 row of virtual buttons at the bottom of the screen. These
655 buttons function much as physical buttons do, in that key
656 down events are produced when a finger taps them, even if
657 the finger is not ultimately released after the OS's
658 gesture navigation is activated.
659
660 Deliver onKeyDown events in onKeyUp instead, so as not to
661 navigate backwards during gesture navigation. */
662
663 return;
664 }
665
651 state = eventModifiers (event); 666 state = eventModifiers (event);
652 667
653 /* Ignore meta-state understood by Emacs for now, or key presses 668 /* Ignore meta-state understood by Emacs for now, or key presses
@@ -677,7 +692,7 @@ public final class EmacsWindow extends EmacsHandleObject
677 public void 692 public void
678 onKeyUp (int keyCode, KeyEvent event) 693 onKeyUp (int keyCode, KeyEvent event)
679 { 694 {
680 int state, state_1; 695 int state, state_1, unicode_char;
681 long time; 696 long time;
682 697
683 /* Compute the event's modifier mask. */ 698 /* Compute the event's modifier mask. */
@@ -691,11 +706,21 @@ public final class EmacsWindow extends EmacsHandleObject
691 = state & ~(KeyEvent.META_ALT_MASK | KeyEvent.META_CTRL_MASK 706 = state & ~(KeyEvent.META_ALT_MASK | KeyEvent.META_CTRL_MASK
692 | KeyEvent.META_SYM_ON | KeyEvent.META_META_MASK); 707 | KeyEvent.META_SYM_ON | KeyEvent.META_META_MASK);
693 708
694 EmacsNative.sendKeyRelease (this.handle, 709 unicode_char = getEventUnicodeChar (event, state_1);
695 event.getEventTime (), 710
696 state, keyCode, 711 if (keyCode == KeyEvent.KEYCODE_BACK)
697 getEventUnicodeChar (event, 712 {
698 state_1)); 713 /* If the key press's been canceled, return immediately. */
714
715 if ((event.getFlags () & KeyEvent.FLAG_CANCELED) != 0)
716 return;
717
718 EmacsNative.sendKeyPress (this.handle, event.getEventTime (),
719 state, keyCode, unicode_char);
720 }
721
722 EmacsNative.sendKeyRelease (this.handle, event.getEventTime (),
723 state, keyCode, unicode_char);
699 724
700 if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) 725 if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
701 { 726 {