refact, split tab to separate window

Signed-off-by: dignow <linlong1265@gmail.com>
This commit is contained in:
dignow
2023-08-06 10:19:30 +08:00
parent 152616a261
commit e2228cc448
39 changed files with 81 additions and 37 deletions

View File

@@ -570,6 +570,17 @@ class _DesktopHomePageState extends State<DesktopHomePage>
forceRelay: call.arguments['forceRelay'],
forceSeparateWindow: call.arguments['forceSeparateWindow'],
);
} else if (call.method == kWindowEventSplit) {
final args = call.arguments.split(',');
int? windowId;
try {
windowId = int.parse(args[0]);
} catch (e) {
debugPrint("Failed to parse window id '${call.arguments}': $e");
}
if (windowId != null) {
await rustDeskWinManager.splitWindow(windowId, args[1], args[2]);
}
}
});
_uniLinksSubscription = listenUniLinks();

View File

@@ -6,7 +6,6 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_hbb/common.dart';
import 'package:flutter_hbb/consts.dart';
import 'package:flutter_hbb/utils/multi_window_manager.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';
@@ -323,13 +322,6 @@ class _GeneralState extends State<_General> {
'Separate remote window',
kOptionSeparateRemoteWindow,
isServer: false,
update: () {
final useSeparateWindow =
mainGetLocalBoolOptionSync(kOptionSeparateRemoteWindow);
if (useSeparateWindow) {
rustDeskWinManager.separateWindows();
}
},
),
];
// though this is related to GUI, but opengl problem affects all users, so put in config rather than local

View File

@@ -329,6 +329,22 @@ class _ConnectionTabPageState extends State<ConnectionTabPage> {
));
}
if (tabController.state.value.tabs.length > 1) {
final splitAction = MenuEntryButton<String>(
childBuilder: (TextStyle? style) => Text(
translate('Split'),
style: style,
),
proc: () async {
await DesktopMultiWindow.invokeMethod(
kMainWindowId, kWindowEventSplit, '${windowId()},$key,$sessionId');
cancelFunc();
},
padding: padding,
);
menu.insert(1, splitAction);
}
if (perms['keyboard'] != false && !ffi.ffiModel.viewOnly) {
if (perms['clipboard'] != false) {
menu.add(RemoteMenuEntry.disableClipboard(sessionId, padding,