multi flutter ui sessions, refact 'Show displays as individual windows'

Signed-off-by: dignow <linlong1265@gmail.com>
This commit is contained in:
dignow
2023-10-09 17:22:22 +08:00
parent e363cd9813
commit b52cf070f5
46 changed files with 140 additions and 118 deletions

View File

@@ -11,7 +11,6 @@ import 'package:flutter_hbb/consts.dart';
import 'package:flutter_hbb/desktop/pages/desktop_home_page.dart';
import 'package:flutter_hbb/desktop/pages/desktop_tab_page.dart';
import 'package:flutter_hbb/models/platform_model.dart';
import 'package:flutter_hbb/models/desktop_render_texture.dart';
import 'package:flutter_hbb/models/server_model.dart';
import 'package:flutter_hbb/plugin/manager.dart';
import 'package:flutter_hbb/plugin/widgets/desktop_settings.dart';
@@ -1124,7 +1123,6 @@ class _DisplayState extends State<_Display> {
controller: scrollController,
physics: DraggableNeverScrollableScrollPhysics(),
children: [
chooseDisplay(context),
viewStyle(context),
scrollStyle(context),
imageQuality(context),
@@ -1133,29 +1131,6 @@ class _DisplayState extends State<_Display> {
]).marginOnly(bottom: _kListViewBottomMargin));
}
Widget chooseDisplay(BuildContext context) {
if (!useTextureRender) return const Offstage();
var current = getChooseDisplayBehavior();
onChanged(String value) {
bind.mainSetOption(key: kKeyChooseDisplayBehavior, value: value);
setState(() {});
}
return _Card(title: 'Choose display behavior', children: [
_Radio<String>(context,
value: kChooseDisplayBehaviorSwitch,
groupValue: current,
label: 'Switch display',
onChanged: onChanged),
_Radio<String>(context,
value: kChooseDisplayBehaviorOpen,
groupValue: current,
label: 'Open in new window',
onChanged: onChanged),
]);
}
Widget viewStyle(BuildContext context) {
final key = 'view_style';
onChanged(String value) async {
@@ -1314,7 +1289,7 @@ class _DisplayState extends State<_Display> {
Widget other(BuildContext context) {
return _Card(title: 'Other Default Options', children: [
otherRow('View Mode', 'view_only'),
otherRow('show_monitors_tip', 'show_monitors_toolbar'),
otherRow('show_monitors_tip', kKeyShowMonitorsToolbar),
otherRow('Collapse toolbar', 'collapse_toolbar'),
otherRow('Show remote cursor', 'show_remote_cursor'),
otherRow('Zoom cursor', 'zoom-cursor'),
@@ -1325,6 +1300,8 @@ class _DisplayState extends State<_Display> {
otherRow('Lock after session end', 'lock_after_session_end'),
otherRow('Privacy mode', 'privacy_mode'),
otherRow('Reverse mouse wheel', 'reverse_mouse_wheel'),
otherRow('Show displays as individual windows',
kKeyShowDisplaysAsIndividualWindows),
]);
}
}

View File

@@ -598,7 +598,7 @@ class _MonitorMenu extends StatelessWidget {
}) : super(key: key);
bool get showMonitorsToolbar =>
bind.mainGetUserDefaultOption(key: 'show_monitors_toolbar') == 'Y';
bind.mainGetUserDefaultOption(key: kKeyShowMonitorsToolbar) == 'Y';
@override
Widget build(BuildContext context) =>
@@ -614,13 +614,40 @@ class _MonitorMenu extends StatelessWidget {
menuStyle: MenuStyle(
padding:
MaterialStatePropertyAll(EdgeInsets.symmetric(horizontal: 6))),
menuChildren: [Row(children: buildMonitorList(false))]);
menuChildren: [buildMonitorSubmenuWidget()]);
}
Widget buildMultiMonitorMenu() {
return Row(children: buildMonitorList(true));
}
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(),
],
);
}
Widget chooseDisplayBehavior() {
final value =
bind.sessionGetDisplaysAsIndividualWindows(sessionId: ffi.sessionId) ==
'Y';
return CkbMenuButton(
value: value,
onChanged: (value) async {
if (value == null) return;
await bind.sessionSetDisplaysAsIndividualWindows(
sessionId: ffi.sessionId, value: value ? 'Y' : '');
},
ffi: ffi,
child: Text(translate('Show displays as individual windows')));
}
List<Widget> buildMonitorList(bool isMulti) {
final List<Widget> monitorList = [];
final pi = ffi.ffiModel.pi;
@@ -746,7 +773,7 @@ class _MonitorMenu extends StatelessWidget {
_menuDismissCallback(ffi);
RxInt display = CurrentDisplayState.find(id);
if (display.value != i) {
if (pi.isSupportMultiDisplay) {
if (isChooseDisplayToOpenInNewWindow(pi, ffi.sessionId)) {
openMonitorInNewTabOrWindow(i, pi);
} else {
openMonitorInTheSameTab(i, pi);