mirror of
https://github.com/fankes/termux-app.git
synced 2025-09-06 18:55:31 +08:00
Do not send mouse up event after scrolling
This fixes an issue where e.g. in tmux, when pressing the finger on an upper pane and dragging it down to scroll and releasing it further down on another pane, the upper pane lost focus to to a mouse click being sent to the pane below.
This commit is contained in:
@@ -80,16 +80,19 @@ public final class TerminalView extends View {
|
|||||||
super(context, attributes);
|
super(context, attributes);
|
||||||
mGestureRecognizer = new GestureAndScaleRecognizer(context, new GestureAndScaleRecognizer.Listener() {
|
mGestureRecognizer = new GestureAndScaleRecognizer(context, new GestureAndScaleRecognizer.Listener() {
|
||||||
|
|
||||||
|
boolean scrolledWithFinger;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onUp(MotionEvent e) {
|
public boolean onUp(MotionEvent e) {
|
||||||
mScrollRemainder = 0.0f;
|
mScrollRemainder = 0.0f;
|
||||||
if (mEmulator != null && mEmulator.isMouseTrackingActive() && !mIsSelectingText) {
|
if (mEmulator != null && mEmulator.isMouseTrackingActive() && !mIsSelectingText && !scrolledWithFinger) {
|
||||||
// Quick event processing when mouse tracking is active - do not wait for check of double tapping
|
// Quick event processing when mouse tracking is active - do not wait for check of double tapping
|
||||||
// for zooming.
|
// for zooming.
|
||||||
sendMouseEventCode(e, TerminalEmulator.MOUSE_LEFT_BUTTON, true);
|
sendMouseEventCode(e, TerminalEmulator.MOUSE_LEFT_BUTTON, true);
|
||||||
sendMouseEventCode(e, TerminalEmulator.MOUSE_LEFT_BUTTON, false);
|
sendMouseEventCode(e, TerminalEmulator.MOUSE_LEFT_BUTTON, false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
scrolledWithFinger = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,19 +114,20 @@ public final class TerminalView extends View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onScroll(MotionEvent e2, float distanceX, float distanceY) {
|
public boolean onScroll(MotionEvent e, float distanceX, float distanceY) {
|
||||||
if (mEmulator == null || mIsSelectingText) return true;
|
if (mEmulator == null || mIsSelectingText) return true;
|
||||||
if (mEmulator.isMouseTrackingActive() && e2.isFromSource(InputDevice.SOURCE_MOUSE)) {
|
if (mEmulator.isMouseTrackingActive() && e.isFromSource(InputDevice.SOURCE_MOUSE)) {
|
||||||
// If moving with mouse pointer while pressing button, report that instead of scroll.
|
// If moving with mouse pointer while pressing button, report that instead of scroll.
|
||||||
// This means that we never report moving with button press-events for touch input,
|
// This means that we never report moving with button press-events for touch input,
|
||||||
// since we cannot just start sending these events without a starting press event,
|
// since we cannot just start sending these events without a starting press event,
|
||||||
// which we do not do for touch input, only mouse in onTouchEvent().
|
// which we do not do for touch input, only mouse in onTouchEvent().
|
||||||
sendMouseEventCode(e2, TerminalEmulator.MOUSE_LEFT_BUTTON_MOVED, true);
|
sendMouseEventCode(e, TerminalEmulator.MOUSE_LEFT_BUTTON_MOVED, true);
|
||||||
} else {
|
} else {
|
||||||
|
scrolledWithFinger = true;
|
||||||
distanceY += mScrollRemainder;
|
distanceY += mScrollRemainder;
|
||||||
int deltaRows = (int) (distanceY / mRenderer.mFontLineSpacing);
|
int deltaRows = (int) (distanceY / mRenderer.mFontLineSpacing);
|
||||||
mScrollRemainder = distanceY - deltaRows * mRenderer.mFontLineSpacing;
|
mScrollRemainder = distanceY - deltaRows * mRenderer.mFontLineSpacing;
|
||||||
doScroll(e2, deltaRows);
|
doScroll(e, deltaRows);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user