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

@@ -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);