diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index d40a4e899..38085ae8c 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -2110,3 +2110,33 @@ Future start_service(bool is_start) async { bind.mainSetOption(key: "stop-service", value: is_start ? "" : "Y"); } } + +typedef Future WhetherUseRemoteBlock(); +Widget buildRemoteBlock({required Widget child, WhetherUseRemoteBlock? use}) { + var block = false.obs; + return Obx(() => MouseRegion( + onEnter: (_) async { + if (use != null && !await use()) { + block.value = false; + return; + } + var time0 = DateTime.now().millisecondsSinceEpoch; + await bind.mainCheckMouseTime(); + Timer(const Duration(milliseconds: 120), () async { + var d = time0 - await bind.mainGetMouseTime(); + if (d < 120) { + block.value = true; + } + }); + }, + onExit: (event) => block.value = false, + child: Stack(children: [ + child, + Offstage( + offstage: !block.value, + child: Container( + color: Colors.black.withOpacity(0.5), + )), + ]), + )); +} diff --git a/flutter/lib/desktop/pages/server_page.dart b/flutter/lib/desktop/pages/server_page.dart index 62333456e..e996de2db 100644 --- a/flutter/lib/desktop/pages/server_page.dart +++ b/flutter/lib/desktop/pages/server_page.dart @@ -184,7 +184,9 @@ class ConnectionManagerState extends State { Consumer( builder: (_, model, child) => model.isShowCMChatPage ? Expanded( - child: ChatPage(), + child: buildRemoteBlock( + child: ChatPage(), + ), flex: (kConnectionManagerWindowSizeOpenChat.width - kConnectionManagerWindowSizeClosedChat .width) diff --git a/flutter/lib/desktop/widgets/tabbar_widget.dart b/flutter/lib/desktop/widgets/tabbar_widget.dart index ab36728cd..975398c94 100644 --- a/flutter/lib/desktop/widgets/tabbar_widget.dart +++ b/flutter/lib/desktop/widgets/tabbar_widget.dart @@ -295,37 +295,16 @@ class DesktopTab extends StatelessWidget { if (tabType != DesktopTabType.main) { return child; } - var block = false.obs; - return Obx(() => MouseRegion( - onEnter: (_) async { - var access_mode = await bind.mainGetOption(key: 'access-mode'); - var option = option2bool( - 'allow-remote-config-modification', - await bind.mainGetOption( - key: 'allow-remote-config-modification')); - if (access_mode == 'view' || (access_mode.isEmpty && !option)) { - var time0 = DateTime.now().millisecondsSinceEpoch; - await bind.mainCheckMouseTime(); - Timer(const Duration(milliseconds: 120), () async { - var d = time0 - await bind.mainGetMouseTime(); - if (d < 120) { - block.value = true; - } - }); - } - }, - onExit: (_) => block.value = false, - child: Stack( - children: [ - child, - Offstage( - offstage: !block.value, - child: Container( - color: Colors.black.withOpacity(0.5), - )), - ], - ), - )); + return buildRemoteBlock( + child: child, + use: () async { + var access_mode = await bind.mainGetOption(key: 'access-mode'); + var option = option2bool( + 'allow-remote-config-modification', + await bind.mainGetOption( + key: 'allow-remote-config-modification')); + return access_mode == 'view' || (access_mode.isEmpty && !option); + }); } List _tabWidgets = [];