From c7c167208821f701ee3cfb3525c029e3382475e3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 16:40:52 +0000 Subject: [PATCH] Filter edge swipe gesture to touch-only input (exclude mouse/trackpad) Co-authored-by: rustdesk <71636191+rustdesk@users.noreply.github.com> --- flutter/lib/mobile/pages/terminal_page.dart | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/flutter/lib/mobile/pages/terminal_page.dart b/flutter/lib/mobile/pages/terminal_page.dart index 3a0789079..a99033c18 100644 --- a/flutter/lib/mobile/pages/terminal_page.dart +++ b/flutter/lib/mobile/pages/terminal_page.dart @@ -45,6 +45,7 @@ class _TerminalPageState extends State // For iOS edge swipe gesture double _swipeStartX = 0; double _swipeCurrentX = 0; + PointerDeviceKind? _swipeDeviceKind; // For web only. // 'monospace' does not work on web, use Google Fonts, `??` is only for null safety. @@ -218,23 +219,29 @@ class _TerminalPageState extends State onHorizontalDragStart: (details) { _swipeStartX = details.globalPosition.dx; _swipeCurrentX = details.globalPosition.dx; // Reset to start position + _swipeDeviceKind = details.kind; // Track device kind }, onHorizontalDragUpdate: (details) { _swipeCurrentX = details.globalPosition.dx; }, onHorizontalDragEnd: (details) { - // Check if swipe started from left edge and moved right - if (_swipeStartX < edgeThreshold && (_swipeCurrentX - _swipeStartX) > swipeThreshold) { - // Trigger exit same as Android back button - clientClose(sessionId, _ffi); + // Only allow touch-based devices (not mouse/trackpad) + if (_swipeDeviceKind != null && kTouchBasedDeviceKinds.contains(_swipeDeviceKind)) { + // Check if swipe started from left edge and moved right + if (_swipeStartX < edgeThreshold && (_swipeCurrentX - _swipeStartX) > swipeThreshold) { + // Trigger exit same as Android back button + clientClose(sessionId, _ffi); + } } _swipeStartX = 0; _swipeCurrentX = 0; + _swipeDeviceKind = null; }, onHorizontalDragCancel: () { // Reset state if gesture is interrupted _swipeStartX = 0; _swipeCurrentX = 0; + _swipeDeviceKind = null; }, child: scaffold, );