From fde8196874db595598efb3f21eaca4d283f15b9c Mon Sep 17 00:00:00 2001 From: dignow Date: Mon, 16 Oct 2023 07:26:55 +0800 Subject: [PATCH] fix several bugs 1. updateCurDisplay, canvas origin (x,y) 2. Do not show "Show displays as individual windows" on non-texture render version. Signed-off-by: dignow --- flutter/lib/common.dart | 3 ++- flutter/lib/common/widgets/toolbar.dart | 4 +++- flutter/lib/desktop/widgets/remote_toolbar.dart | 11 +++++++---- flutter/lib/models/model.dart | 4 ++-- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index 73b4bf1a5..1da2dc60a 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -14,6 +14,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_hbb/common/formatter/id_formatter.dart'; import 'package:flutter_hbb/desktop/widgets/refresh_wrapper.dart'; import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart'; +import 'package:flutter_hbb/models/desktop_render_texture.dart'; import 'package:flutter_hbb/main.dart'; import 'package:flutter_hbb/models/peer_model.dart'; import 'package:flutter_hbb/models/state_model.dart'; @@ -2602,5 +2603,5 @@ sessionRefreshVideo(SessionID sessionId, PeerInfo pi) async { bool isChooseDisplayToOpenInNewWindow(PeerInfo pi, SessionID sessionId) => pi.isSupportMultiDisplay && + useTextureRender && bind.sessionGetDisplaysAsIndividualWindows(sessionId: sessionId) == 'Y'; - diff --git a/flutter/lib/common/widgets/toolbar.dart b/flutter/lib/common/widgets/toolbar.dart index ceb28b0a3..ebaff8954 100644 --- a/flutter/lib/common/widgets/toolbar.dart +++ b/flutter/lib/common/widgets/toolbar.dart @@ -9,6 +9,7 @@ import 'package:flutter_hbb/common/widgets/dialog.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/models/model.dart'; import 'package:flutter_hbb/models/platform_model.dart'; +import 'package:flutter_hbb/models/desktop_render_texture.dart'; import 'package:get/get.dart'; bool isEditOsPassword = false; @@ -516,7 +517,8 @@ Future> toolbarDisplayToggle( child: Text(translate('Swap control-command key')))); } - if (pi.isSupportMultiDisplay && + if (useTextureRender && + pi.isSupportMultiDisplay && PrivacyModeState.find(id).isFalse && pi.displaysCount.value > 1 && bind.mainGetUserDefaultOption(key: kKeyShowMonitorsToolbar) == 'Y') { diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index 1bf4d438a..92038f68b 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -9,6 +9,7 @@ import 'package:flutter_hbb/common/widgets/toolbar.dart'; import 'package:flutter_hbb/main.dart'; import 'package:flutter_hbb/models/chat_model.dart'; import 'package:flutter_hbb/models/state_model.dart'; +import 'package:flutter_hbb/models/desktop_render_texture.dart'; import 'package:flutter_hbb/consts.dart'; import 'package:flutter_hbb/utils/multi_window_manager.dart'; import 'package:flutter_hbb/plugin/widgets/desc_ui.dart'; @@ -600,6 +601,9 @@ class _MonitorMenu extends StatelessWidget { bool get showMonitorsToolbar => bind.mainGetUserDefaultOption(key: kKeyShowMonitorsToolbar) == 'Y'; + bool get supportIndividualWindows => + useTextureRender && ffi.ffiModel.pi.isSupportMultiDisplay; + @override Widget build(BuildContext context) => showMonitorsToolbar ? buildMultiMonitorMenu() : buildMonitorMenu(); @@ -622,13 +626,12 @@ class _MonitorMenu extends StatelessWidget { } Widget buildMonitorSubmenuWidget() { - final pi = ffi.ffiModel.pi; return Column( mainAxisSize: MainAxisSize.min, children: [ Row(children: buildMonitorList(false)), - pi.isSupportMultiDisplay ? Divider() : Offstage(), - pi.isSupportMultiDisplay ? chooseDisplayBehavior() : Offstage(), + supportIndividualWindows ? Divider() : Offstage(), + supportIndividualWindows ? chooseDisplayBehavior() : Offstage(), ], ); } @@ -711,7 +714,7 @@ class _MonitorMenu extends StatelessWidget { for (int i = 0; i < pi.displays.length; i++) { monitorList.add(buildMonitorButton(i)); } - if (pi.isSupportMultiUiSession && pi.displays.length > 1) { + if (supportIndividualWindows && pi.displays.length > 1) { monitorList.add(buildMonitorButton(kAllDisplayValue)); } return monitorList; diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index a0fde0ca4..d257f3290 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -19,6 +19,7 @@ import 'package:flutter_hbb/models/peer_tab_model.dart'; import 'package:flutter_hbb/models/server_model.dart'; import 'package:flutter_hbb/models/user_model.dart'; import 'package:flutter_hbb/models/state_model.dart'; +import 'package:flutter_hbb/models/desktop_render_texture.dart'; import 'package:flutter_hbb/plugin/event.dart'; import 'package:flutter_hbb/plugin/manager.dart'; import 'package:flutter_hbb/plugin/widgets/desc_ui.dart'; @@ -415,11 +416,11 @@ class FfiModel with ChangeNotifier { return; } if (newRect != _rect) { - _rect = newRect; if (newRect.left != _rect?.left || newRect.top != _rect?.top) { parent.target?.cursorModel .updateDisplayOrigin(newRect.left, newRect.top); } + _rect = newRect; parent.target?.canvasModel.updateViewStyle(); _updateSessionWidthHeight(sessionId); } @@ -1991,7 +1992,6 @@ class FFI { } final stream = bind.sessionStart(sessionId: sessionId, id: id); final cb = ffiModel.startEventListener(sessionId, id); - final useTextureRender = bind.mainUseTextureRender(); // Force refresh displays. // The controlled side may not refresh the image when the (peer,display) is already subscribed.