From df5898b0d33c03449b41b891a3d34f896a14a19e Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 11 Aug 2017 13:37:40 -0700 Subject: [PATCH] Fixed bug 3464 - Fix for Android hint SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH ny00 According to the current documentation in SDL_hints.h, if SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH is set to "0" (or not set at all) then mouse input should lead to touch events, along with corresponding *fake* mouse events with mouse id SDL_TOUCH_MOUSEID. However, while moving a mouse around (actually using a trackpad identified as a mouse), I get SDL mouse motion events with differing mouse ids, as follows: - If the mouse is moved while a mouse button is pressed, the mouse id is SDL_TOUCH_MOUSEID. - Otherwise, the mouse id for mouse motion events is 0. I've attached sample code for reference, which includes logs of the various mouse events (the "which" field is covered). I believe that no actual mouse event should arrive, if the hint is unset. In particular, no mouse motion event should arrive while no mouse button is pressed. I'm going to attach a patch which resolves this, while also disabling mouse wheel motion events. --- android-project/src/org/libsdl/app/SDLActivity.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/android-project/src/org/libsdl/app/SDLActivity.java b/android-project/src/org/libsdl/app/SDLActivity.java index f41db7364e4e1..abee46dc84ebf 100644 --- a/android-project/src/org/libsdl/app/SDLActivity.java +++ b/android-project/src/org/libsdl/app/SDLActivity.java @@ -1748,6 +1748,9 @@ public boolean onGenericMotion(View v, MotionEvent event) { return SDLActivity.handleJoystickMotionEvent(event); case InputDevice.SOURCE_MOUSE: + if (!SDLActivity.mSeparateMouseAndTouch) { + break; + } action = event.getActionMasked(); switch (action) { case MotionEvent.ACTION_SCROLL: