diff options
| author | Po Lu | 2023-11-25 10:40:13 +0800 |
|---|---|---|
| committer | Po Lu | 2023-11-25 10:41:09 +0800 |
| commit | 207ee7f9880c72920d4b323d7d6ed16544ba948b (patch) | |
| tree | 8cd567aa282159cb0904b812d093ed403374d891 /java/org/gnu | |
| parent | 505edceaf44a9d4e072975473170a674b949e504 (diff) | |
| download | emacs-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.java | 37 |
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 | { |