From 79fc51a1b5883db0cd400c3c3ac3d2b82adb3495 Mon Sep 17 00:00:00 2001 From: 21pages Date: Tue, 20 Jun 2023 12:43:38 +0800 Subject: [PATCH] show cm after receiving textchat when cm hidden Signed-off-by: 21pages --- flutter/lib/main.dart | 56 ++++++++++++++++++---------- flutter/lib/models/chat_model.dart | 5 +++ flutter/lib/models/server_model.dart | 4 +- 3 files changed, 44 insertions(+), 21 deletions(-) diff --git a/flutter/lib/main.dart b/flutter/lib/main.dart index 3dca92a2e..9c032ffa1 100644 --- a/flutter/lib/main.dart +++ b/flutter/lib/main.dart @@ -224,36 +224,54 @@ void runConnectionManagerScreen(bool hide) async { MyTheme.currentThemeMode(), ); if (hide) { - hideCmWindow(); + await hideCmWindow(isStartup: true); } else { - showCmWindow(); + await showCmWindow(isStartup: true); } // Start the uni links handler and redirect links to Native, not for Flutter. _uniLinkSubscription = listenUniLinks(handleByFlutter: false); } -void showCmWindow() { - WindowOptions windowOptions = getHiddenTitleBarWindowOptions( - size: kConnectionManagerWindowSizeClosedChat); - windowManager.waitUntilReadyToShow(windowOptions, () async { - bind.mainHideDocker(); - await windowManager.show(); - await Future.wait([windowManager.focus(), windowManager.setOpacity(1)]); - // ensure initial window size to be changed - await windowManager.setSizeAlignment( - kConnectionManagerWindowSizeClosedChat, Alignment.topRight); - }); +showCmWindow({bool isStartup = false}) async { + if (isStartup) { + WindowOptions windowOptions = getHiddenTitleBarWindowOptions( + size: kConnectionManagerWindowSizeClosedChat); + windowManager.waitUntilReadyToShow(windowOptions, () async { + bind.mainHideDocker(); + await windowManager.show(); + await Future.wait([windowManager.focus(), windowManager.setOpacity(1)]); + // ensure initial window size to be changed + await windowManager.setSizeAlignment( + kConnectionManagerWindowSizeClosedChat, Alignment.topRight); + }); + } else { + if (await windowManager.getOpacity() != 1) { + await windowManager.setOpacity(1); + await windowManager.focus(); + await windowManager.minimize(); //needed + await windowManager.setSizeAlignment( + kConnectionManagerWindowSizeClosedChat, Alignment.topRight); + window_on_top(null); + } + } } -void hideCmWindow() { - WindowOptions windowOptions = getHiddenTitleBarWindowOptions( - size: kConnectionManagerWindowSizeClosedChat); - windowManager.setOpacity(0); - windowManager.waitUntilReadyToShow(windowOptions, () async { +hideCmWindow({bool isStartup = false}) async { + if (isStartup) { + WindowOptions windowOptions = getHiddenTitleBarWindowOptions( + size: kConnectionManagerWindowSizeClosedChat); + windowManager.setOpacity(0); + windowManager.waitUntilReadyToShow(windowOptions, () async { + bind.mainHideDocker(); + await windowManager.minimize(); + await windowManager.hide(); + }); + } else { + await windowManager.setOpacity(0); bind.mainHideDocker(); await windowManager.minimize(); await windowManager.hide(); - }); + } } void _runApp( diff --git a/flutter/lib/models/chat_model.dart b/flutter/lib/models/chat_model.dart index 58fc1f220..8c1e0a9a4 100644 --- a/flutter/lib/models/chat_model.dart +++ b/flutter/lib/models/chat_model.dart @@ -13,6 +13,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import '../consts.dart'; import '../common.dart'; import '../common/widgets/overlay.dart'; +import '../main.dart'; import 'model.dart'; class MessageBody { @@ -288,6 +289,10 @@ class ChatModel with ChangeNotifier { return; } if (text.isEmpty) return; + if (desktopType == DesktopType.cm) { + await showCmWindow(); + } + // mobile: first message show overlay icon if (!isDesktop && chatIconOverlayEntry == null) { showChatIconOverlay(); diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index a65c3ad52..2ca608bd6 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -224,9 +224,9 @@ class ServerModel with ChangeNotifier { _hideCm = hideCm; if (desktopType == DesktopType.cm) { if (hideCm) { - hideCmWindow(); + await hideCmWindow(); } else { - showCmWindow(); + await showCmWindow(); } } update = true;