summaryrefslogtreecommitdiff
path: root/java/org/gnu/emacs/EmacsWindow.java
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2023-03-14 13:19:01 +0800
committerPo Lu <luangruo@yahoo.com>2023-03-14 13:19:01 +0800
commitd6bddca26c7cf827e098ae783e865fcbcdd48799 (patch)
treeaba22e667c97e4418e84171309f46b9f2e4e7509 /java/org/gnu/emacs/EmacsWindow.java
parent5964051fcefc52e02c88a41b91797cc7a785d550 (diff)
Update Android port
* java/org/gnu/emacs/EmacsWindow.java (figureChange): Detect mice on up events as well. (onSomeKindOfMotionEvent): Work past framework bug. * src/androidterm.c (android_perform_conversion_query): * src/textconv.c (textconv_query): * src/textconv.h (TEXTCONV_SKIP_ACTIVE_REGION): Remove unused code.
Diffstat (limited to 'java/org/gnu/emacs/EmacsWindow.java')
-rw-r--r--java/org/gnu/emacs/EmacsWindow.java33
1 files changed, 32 insertions, 1 deletions
diff --git a/java/org/gnu/emacs/EmacsWindow.java b/java/org/gnu/emacs/EmacsWindow.java
index d786c104153..a8d1beedef7 100644
--- a/java/org/gnu/emacs/EmacsWindow.java
+++ b/java/org/gnu/emacs/EmacsWindow.java
@@ -755,6 +755,14 @@ public final class EmacsWindow extends EmacsHandleObject
break;
case MotionEvent.ACTION_UP:
+
+ /* Detect mice. If this is a mouse event, give it to
+ onSomeKindOfMotionEvent. */
+ if ((Build.VERSION.SDK_INT
+ >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
+ && event.getToolType (0) == MotionEvent.TOOL_TYPE_MOUSE)
+ return -2;
+
/* Primary pointer released with index 0. */
pointerID = event.getPointerId (0);
pointerMap.remove (pointerID);
@@ -916,6 +924,7 @@ public final class EmacsWindow extends EmacsHandleObject
EmacsNative.sendLeaveNotify (this.handle, (int) event.getX (),
(int) event.getY (),
event.getEventTime ());
+
return true;
case MotionEvent.ACTION_BUTTON_PRESS:
@@ -949,13 +958,35 @@ public final class EmacsWindow extends EmacsHandleObject
return true;
case MotionEvent.ACTION_DOWN:
- case MotionEvent.ACTION_UP:
/* Emacs must return true even though touch events are not
handled here, because the value of this function is used by
the system to decide whether or not Emacs gets ACTION_MOVE
events. */
return true;
+ case MotionEvent.ACTION_UP:
+ /* However, if ACTION_UP reports a different button state from
+ the last known state, look up which button was released and
+ send a ButtonRelease event; this is to work around a bug in
+ the framework where real ACTION_BUTTON_RELEASE events are
+ not delivered. */
+
+ if (Build.VERSION.SDK_INT
+ < Build.VERSION_CODES.ICE_CREAM_SANDWICH)
+ return true;
+
+ if (event.getButtonState () == 0 && lastButtonState != 0)
+ {
+ EmacsNative.sendButtonRelease (this.handle, (int) event.getX (),
+ (int) event.getY (),
+ event.getEventTime (),
+ lastModifiers,
+ whatButtonWasIt (event, false));
+ lastButtonState = event.getButtonState ();
+ }
+
+ return true;
+
case MotionEvent.ACTION_SCROLL:
/* Send a scroll event with the specified deltas. */
EmacsNative.sendWheel (this.handle, (int) event.getX (),