mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-05-09 15:48:09 +03:00
fix: iPad mouse down detection for physical mouse input (#14515)
* fix: iPad mouse down detection Signed-off-by: Amirhossein Akhlaghpour <m9.akhlaghpoor@gmail.com> * fix(ipad): remove redundant check Signed-off-by: fufesou <linlong1266@gmail.com> * fix(ipad): Simple refactor Signed-off-by: fufesou <linlong1266@gmail.com> --------- Signed-off-by: Amirhossein Akhlaghpour <m9.akhlaghpoor@gmail.com> Signed-off-by: fufesou <linlong1266@gmail.com> Co-authored-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
committed by
GitHub
parent
ee8cc0c06b
commit
590296b297
@@ -1495,6 +1495,16 @@ class InputModel {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// iOS may emit a synthesized touch event after a real mouse click.
|
||||||
|
/// This helper ignores touch-down events that arrive shortly after a mouse down,
|
||||||
|
/// even when the position is far (e.g., near the top edge).
|
||||||
|
bool _shouldIgnoreTouchAfterMouse(int nowMs) {
|
||||||
|
if (!isIOS) return false;
|
||||||
|
const int kTouchAfterMouseWindowMs = 700;
|
||||||
|
final dt = nowMs - _lastMouseDownTimeMs;
|
||||||
|
return dt >= 0 && dt < kTouchAfterMouseWindowMs;
|
||||||
|
}
|
||||||
|
|
||||||
void onPointDownImage(PointerDownEvent e) {
|
void onPointDownImage(PointerDownEvent e) {
|
||||||
debugPrint("onPointDownImage ${e.kind}");
|
debugPrint("onPointDownImage ${e.kind}");
|
||||||
_stopFling = true;
|
_stopFling = true;
|
||||||
@@ -1507,6 +1517,9 @@ class InputModel {
|
|||||||
// Track mouse down events for duplicate detection on iOS.
|
// Track mouse down events for duplicate detection on iOS.
|
||||||
final nowMs = DateTime.now().millisecondsSinceEpoch;
|
final nowMs = DateTime.now().millisecondsSinceEpoch;
|
||||||
if (e.kind == ui.PointerDeviceKind.mouse) {
|
if (e.kind == ui.PointerDeviceKind.mouse) {
|
||||||
|
if (!isPhysicalMouse.value) {
|
||||||
|
isPhysicalMouse.value = true;
|
||||||
|
}
|
||||||
_lastMouseDownTimeMs = nowMs;
|
_lastMouseDownTimeMs = nowMs;
|
||||||
_lastMouseDownPos = e.position;
|
_lastMouseDownPos = e.position;
|
||||||
}
|
}
|
||||||
@@ -1516,6 +1529,10 @@ class InputModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (e.kind != ui.PointerDeviceKind.mouse) {
|
if (e.kind != ui.PointerDeviceKind.mouse) {
|
||||||
|
// Ignore duplicate touch events that follow a recent mouse click (iOS Magic Mouse issue).
|
||||||
|
if (isPhysicalMouse.value && _shouldIgnoreTouchAfterMouse(nowMs)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (isPhysicalMouse.value) {
|
if (isPhysicalMouse.value) {
|
||||||
isPhysicalMouse.value = false;
|
isPhysicalMouse.value = false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user