From 7f640b77f0a902f7659e54944b3b86db9794b159 Mon Sep 17 00:00:00 2001 From: fufesou Date: Mon, 14 Nov 2022 16:16:38 +0800 Subject: [PATCH] fix cursor linux force update after remote cursor moved Signed-off-by: fufesou --- flutter/lib/desktop/pages/remote_page.dart | 34 ++++++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 015eb3037..2b8c99940 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -251,14 +251,12 @@ class _RemotePageState extends State bool get wantKeepAlive => true; } -class ImagePaint extends StatelessWidget { +class ImagePaint extends StatefulWidget { final String id; final Rx cursorOverImage; final Rx keyboardEnabled; final Rx remoteCursorMoved; final Widget Function(Widget)? listenerBuilder; - final ScrollController _horizontal = ScrollController(); - final ScrollController _vertical = ScrollController(); ImagePaint( {Key? key, @@ -269,6 +267,21 @@ class ImagePaint extends StatelessWidget { this.listenerBuilder}) : super(key: key); + @override + State createState() => _ImagePaintState(); +} + +class _ImagePaintState extends State { + bool _lastRemoteCursorMoved = false; + final ScrollController _horizontal = ScrollController(); + final ScrollController _vertical = ScrollController(); + + String get id => widget.id; + Rx get cursorOverImage => widget.cursorOverImage; + Rx get keyboardEnabled => widget.keyboardEnabled; + Rx get remoteCursorMoved => widget.remoteCursorMoved; + Widget Function(Widget)? get listenerBuilder => widget.listenerBuilder; + @override Widget build(BuildContext context) { final m = Provider.of(context); @@ -278,9 +291,18 @@ class ImagePaint extends StatelessWidget { mouseRegion({child}) => Obx(() => MouseRegion( cursor: cursorOverImage.isTrue ? keyboardEnabled.isTrue - ? (remoteCursorMoved.isTrue - ? SystemMouseCursors.none - : _buildCustomCursor(context, s)) + ? (() { + if (remoteCursorMoved.isTrue) { + _lastRemoteCursorMoved = true; + return SystemMouseCursors.none; + } else { + if (_lastRemoteCursorMoved) { + _lastRemoteCursorMoved = false; + _firstEnterImage.value = true; + } + return _buildCustomCursor(context, s); + } + }()) : _buildDisabledCursor(context, s) : MouseCursor.defer, onHover: (evt) {},