diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 76395be9d..55cfcd643 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -8,6 +8,7 @@ import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:provider/provider.dart'; import 'package:wakelock/wakelock.dart'; +import 'package:window_manager/window_manager.dart'; import 'package:flutter_custom_cursor/flutter_custom_cursor.dart'; import 'package:flutter_improved_scrolling/flutter_improved_scrolling.dart'; @@ -46,7 +47,7 @@ class RemotePage extends StatefulWidget { } class _RemotePageState extends State - with AutomaticKeepAliveClientMixin { + with AutomaticKeepAliveClientMixin, WindowListener { Timer? _timer; String keyboardMode = "legacy"; final _cursorOverImage = false.obs; @@ -248,6 +249,21 @@ class _RemotePageState extends State ); } + @override + void onWindowMinimize() { + _ffi.chatModel.setWindowMinimized(true); + } + + @override + void onWindowMaximize() { + _ffi.chatModel.setWindowMinimized(false); + } + + @override + void onWindowRestore() { + _ffi.chatModel.setWindowMinimized(false); + } + @override bool get wantKeepAlive => true; } diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index 9aa1a23ce..aaa81382c 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -32,6 +32,8 @@ class ChatModel with ChangeNotifier { OverlayState? _overlayState; OverlayEntry? chatIconOverlayEntry; OverlayEntry? chatWindowOverlayEntry; + bool _showOnWindowRestore = false; + bool _isWindowMinimized = false; final ChatUser me = ChatUser( id: "", @@ -66,6 +68,14 @@ class ChatModel with ChangeNotifier { } } + setWindowMinimized(bool v) { + _isWindowMinimized = v; + if (!_isWindowMinimized && _showOnWindowRestore) { + showChatIconOverlay(); + _showOnWindowRestore = false; + } + } + setOverlayState(OverlayState? os) { _overlayState = os; } @@ -101,6 +111,7 @@ class ChatModel with ChangeNotifier { initPositionYInTop: false, initPositionYMarginBorder: 100, borderTopContainTopBar: true, + appBarHeight: 0, ), child: FloatingActionButton( onPressed: () { @@ -209,7 +220,11 @@ class ChatModel with ChangeNotifier { if (text.isEmpty) return; // mobile: first message show overlay icon if (chatIconOverlayEntry == null) { - showChatIconOverlay(); + if (_isWindowMinimized) { + showChatIconOverlay(); + } else { + _showOnWindowRestore = true; + } } // desktop: show chat page if (!_isShowChatPage) {