mirror of
https://github.com/rustdesk/rustdesk.git
synced 2024-12-01 09:59:19 +08:00
Merge branch 'rustdesk:master' into mac-icon
This commit is contained in:
commit
5d59dbb89c
@ -1263,23 +1263,23 @@ StreamSubscription? listenUniLinks() {
|
||||
bool checkArguments() {
|
||||
// bootArgs:[--connect, 362587269, --switch_uuid, e3d531cc-5dce-41e0-bd06-5d4a2b1eec05]
|
||||
// check connect args
|
||||
final connectIndex = bootArgs.indexOf("--connect");
|
||||
final connectIndex = kBootArgs.indexOf("--connect");
|
||||
if (connectIndex == -1) {
|
||||
return false;
|
||||
}
|
||||
String? id =
|
||||
bootArgs.length < connectIndex + 1 ? null : bootArgs[connectIndex + 1];
|
||||
final switchUuidIndex = bootArgs.indexOf("--switch_uuid");
|
||||
String? switchUuid = bootArgs.length < switchUuidIndex + 1
|
||||
kBootArgs.length < connectIndex + 1 ? null : kBootArgs[connectIndex + 1];
|
||||
final switchUuidIndex = kBootArgs.indexOf("--switch_uuid");
|
||||
String? switchUuid = kBootArgs.length < switchUuidIndex + 1
|
||||
? null
|
||||
: bootArgs[switchUuidIndex + 1];
|
||||
: kBootArgs[switchUuidIndex + 1];
|
||||
if (id != null) {
|
||||
if (id.startsWith(kUniLinksPrefix)) {
|
||||
return parseRustdeskUri(id);
|
||||
} else {
|
||||
// remove "--connect xxx" in the `bootArgs` array
|
||||
bootArgs.removeAt(connectIndex);
|
||||
bootArgs.removeAt(connectIndex);
|
||||
kBootArgs.removeAt(connectIndex);
|
||||
kBootArgs.removeAt(connectIndex);
|
||||
// fallback to peer id
|
||||
Future.delayed(Duration.zero, () {
|
||||
rustDeskWinManager.newRemoteDesktop(id, switch_uuid: switchUuid);
|
||||
@ -1617,3 +1617,23 @@ Widget dialogButton(String text,
|
||||
int version_cmp(String v1, String v2) {
|
||||
return bind.versionToNumber(v: v1) - bind.versionToNumber(v: v2);
|
||||
}
|
||||
|
||||
String getWindowName({WindowType? overrideType}) {
|
||||
switch (overrideType ?? kWindowType) {
|
||||
case WindowType.Main:
|
||||
return "RustDesk";
|
||||
case WindowType.FileTransfer:
|
||||
return "File Transfer - RustDesk";
|
||||
case WindowType.PortForward:
|
||||
return "Port Forward - RustDesk";
|
||||
case WindowType.RemoteDesktop:
|
||||
return "Remote Desktop - RustDesk";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return "RustDesk";
|
||||
}
|
||||
|
||||
String getWindowNameWithId(String id, {WindowType? overrideType}) {
|
||||
return "${DesktopTab.labelGetterAlias(id).value} - ${getWindowName(overrideType: overrideType)}";
|
||||
}
|
||||
|
@ -31,6 +31,10 @@ class _FileManagerTabPageState extends State<FileManagerTabPage> {
|
||||
|
||||
_FileManagerTabPageState(Map<String, dynamic> params) {
|
||||
Get.put(DesktopTabController(tabType: DesktopTabType.fileTransfer));
|
||||
tabController.onSelected = (_, id) {
|
||||
WindowController.fromWindowId(windowId())
|
||||
.setTitle(getWindowNameWithId(id));
|
||||
};
|
||||
tabController.add(TabInfo(
|
||||
key: params['id'],
|
||||
label: params['id'],
|
||||
|
@ -31,6 +31,10 @@ class _PortForwardTabPageState extends State<PortForwardTabPage> {
|
||||
isRDP = params['isRDP'];
|
||||
tabController =
|
||||
Get.put(DesktopTabController(tabType: DesktopTabType.portForward));
|
||||
tabController.onSelected = (_, id) {
|
||||
WindowController.fromWindowId(windowId())
|
||||
.setTitle(getWindowNameWithId(id));
|
||||
};
|
||||
tabController.add(TabInfo(
|
||||
key: params['id'],
|
||||
label: params['id'],
|
||||
|
@ -39,8 +39,7 @@ class ConnectionTabPage extends StatefulWidget {
|
||||
|
||||
class _ConnectionTabPageState extends State<ConnectionTabPage> {
|
||||
final tabController = Get.put(DesktopTabController(
|
||||
tabType: DesktopTabType.remoteScreen,
|
||||
onSelected: (_, id) => bind.setCurSessionId(id: id)));
|
||||
tabType: DesktopTabType.remoteScreen));
|
||||
static const IconData selectedIcon = Icons.desktop_windows_sharp;
|
||||
static const IconData unselectedIcon = Icons.desktop_windows_outlined;
|
||||
|
||||
@ -54,6 +53,11 @@ class _ConnectionTabPageState extends State<ConnectionTabPage> {
|
||||
final peerId = params['id'];
|
||||
if (peerId != null) {
|
||||
ConnectionTypeState.init(peerId);
|
||||
tabController.onSelected = (_, id) {
|
||||
bind.setCurSessionId(id: id);
|
||||
WindowController.fromWindowId(windowId())
|
||||
.setTitle(getWindowNameWithId(id));
|
||||
};
|
||||
tabController.add(TabInfo(
|
||||
key: peerId,
|
||||
label: peerId,
|
||||
@ -76,6 +80,7 @@ class _ConnectionTabPageState extends State<ConnectionTabPage> {
|
||||
super.initState();
|
||||
|
||||
tabController.onRemoved = (_, id) => onRemoveId(id);
|
||||
|
||||
|
||||
rustDeskWinManager.setMethodHandler((call, fromWindowId) async {
|
||||
print(
|
||||
|
@ -30,7 +30,12 @@ class _DesktopServerPageState extends State<DesktopServerPage>
|
||||
void initState() {
|
||||
gFFI.ffiModel.updateEventListener("");
|
||||
windowManager.addListener(this);
|
||||
tabController.onRemoved = (_, id) => onRemoveId(id);
|
||||
tabController.onRemoved = (_, id) {
|
||||
onRemoveId(id);
|
||||
};
|
||||
tabController.onSelected = (_, id) {
|
||||
windowManager.setTitle(getWindowNameWithId(id));
|
||||
};
|
||||
super.initState();
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ class RefreshWrapperState extends State<RefreshWrapper> {
|
||||
}
|
||||
|
||||
rebuild() {
|
||||
debugPrint("=====Global State Rebuild (win-${windowId ?? 'main'})=====");
|
||||
debugPrint("=====Global State Rebuild (win-${kWindowId ?? 'main'})=====");
|
||||
if (Get.context != null) {
|
||||
(context as Element).visitChildren(_rebuildElement);
|
||||
}
|
||||
|
@ -486,7 +486,7 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
||||
}
|
||||
});
|
||||
} else {
|
||||
final wc = WindowController.fromWindowId(windowId!);
|
||||
final wc = WindowController.fromWindowId(kWindowId!);
|
||||
wc.isMaximized().then((maximized) {
|
||||
debugPrint("isMaximized $maximized");
|
||||
if (widget.isMaximized.value != maximized) {
|
||||
@ -534,10 +534,10 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
||||
await windowManager.hide();
|
||||
} else {
|
||||
// it's safe to hide the subwindow
|
||||
await WindowController.fromWindowId(windowId!).hide();
|
||||
await WindowController.fromWindowId(kWindowId!).hide();
|
||||
await Future.wait([
|
||||
rustDeskWinManager
|
||||
.call(WindowType.Main, kWindowEventHide, {"id": windowId!}),
|
||||
.call(WindowType.Main, kWindowEventHide, {"id": kWindowId!}),
|
||||
widget.onClose?.call() ?? Future.microtask(() => null)
|
||||
]);
|
||||
}
|
||||
@ -563,7 +563,7 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
||||
if (widget.isMainWindow) {
|
||||
windowManager.minimize();
|
||||
} else {
|
||||
WindowController.fromWindowId(windowId!).minimize();
|
||||
WindowController.fromWindowId(kWindowId!).minimize();
|
||||
}
|
||||
},
|
||||
isClose: false,
|
||||
@ -593,7 +593,7 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
||||
if (widget.isMainWindow) {
|
||||
await windowManager.close();
|
||||
} else {
|
||||
await WindowController.fromWindowId(windowId!)
|
||||
await WindowController.fromWindowId(kWindowId!)
|
||||
.close();
|
||||
}
|
||||
});
|
||||
@ -622,7 +622,7 @@ void startDragging(bool isMainWindow) {
|
||||
if (isMainWindow) {
|
||||
windowManager.startDragging();
|
||||
} else {
|
||||
WindowController.fromWindowId(windowId!).startDragging();
|
||||
WindowController.fromWindowId(kWindowId!).startDragging();
|
||||
}
|
||||
}
|
||||
|
||||
@ -638,7 +638,7 @@ Future<bool> toggleMaximize(bool isMainWindow) async {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
final wc = WindowController.fromWindowId(windowId!);
|
||||
final wc = WindowController.fromWindowId(kWindowId!);
|
||||
if (await wc.isMaximized()) {
|
||||
wc.unmaximize();
|
||||
return false;
|
||||
|
@ -26,13 +26,15 @@ import 'mobile/pages/home_page.dart';
|
||||
import 'mobile/pages/server_page.dart';
|
||||
import 'models/platform_model.dart';
|
||||
|
||||
int? windowId;
|
||||
late List<String> bootArgs;
|
||||
/// Basic window and launch properties.
|
||||
int? kWindowId;
|
||||
WindowType? kWindowType;
|
||||
late List<String> kBootArgs;
|
||||
|
||||
Future<void> main(List<String> args) async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
debugPrint("launch args: $args");
|
||||
bootArgs = List.from(args);
|
||||
kBootArgs = List.from(args);
|
||||
|
||||
if (!isDesktop) {
|
||||
runMobileApp();
|
||||
@ -40,10 +42,10 @@ Future<void> main(List<String> args) async {
|
||||
}
|
||||
// main window
|
||||
if (args.isNotEmpty && args.first == 'multi_window') {
|
||||
windowId = int.parse(args[1]);
|
||||
stateGlobal.setWindowId(windowId!);
|
||||
kWindowId = int.parse(args[1]);
|
||||
stateGlobal.setWindowId(kWindowId!);
|
||||
if (!Platform.isMacOS) {
|
||||
WindowController.fromWindowId(windowId!).showTitleBar(false);
|
||||
WindowController.fromWindowId(kWindowId!).showTitleBar(false);
|
||||
}
|
||||
final argument = args[2].isEmpty
|
||||
? <String, dynamic>{}
|
||||
@ -51,35 +53,32 @@ Future<void> main(List<String> args) async {
|
||||
int type = argument['type'] ?? -1;
|
||||
// to-do: No need to parse window id ?
|
||||
// Because stateGlobal.windowId is a global value.
|
||||
argument['windowId'] = windowId;
|
||||
WindowType wType = type.windowType;
|
||||
switch (wType) {
|
||||
argument['windowId'] = kWindowId;
|
||||
kWindowType = type.windowType;
|
||||
final windowName = getWindowName();
|
||||
switch (kWindowType) {
|
||||
case WindowType.RemoteDesktop:
|
||||
desktopType = DesktopType.remote;
|
||||
runMultiWindow(
|
||||
argument,
|
||||
kAppTypeDesktopRemote,
|
||||
'RustDesk - Remote Desktop',
|
||||
windowName,
|
||||
);
|
||||
WindowController.fromWindowId(windowId!)
|
||||
.setTitle('RustDesk - Remote Desktop');
|
||||
break;
|
||||
case WindowType.FileTransfer:
|
||||
desktopType = DesktopType.fileTransfer;
|
||||
runMultiWindow(
|
||||
argument,
|
||||
kAppTypeDesktopFileTransfer,
|
||||
'RustDesk - File Transfer',
|
||||
windowName,
|
||||
);
|
||||
WindowController.fromWindowId(windowId!)
|
||||
.setTitle('RustDesk - File Transfer');
|
||||
break;
|
||||
case WindowType.PortForward:
|
||||
desktopType = DesktopType.portForward;
|
||||
runMultiWindow(
|
||||
argument,
|
||||
kAppTypeDesktopPortForward,
|
||||
'RustDesk - Port Forward',
|
||||
windowName,
|
||||
);
|
||||
break;
|
||||
default:
|
||||
@ -139,7 +138,7 @@ void runMainApp(bool startService) async {
|
||||
windowManager.waitUntilReadyToShow(windowOptions, () async {
|
||||
windowManager.setOpacity(1);
|
||||
});
|
||||
windowManager.setTitle("RustDesk");
|
||||
windowManager.setTitle(getWindowName());
|
||||
}
|
||||
|
||||
void runMobileApp() async {
|
||||
@ -155,7 +154,7 @@ void runMultiWindow(
|
||||
) async {
|
||||
await initEnv(appType);
|
||||
// set prevent close to true, we handle close event manually
|
||||
WindowController.fromWindowId(windowId!).setPreventClose(true);
|
||||
WindowController.fromWindowId(kWindowId!).setPreventClose(true);
|
||||
late Widget widget;
|
||||
switch (appType) {
|
||||
case kAppTypeDesktopRemote:
|
||||
@ -184,26 +183,26 @@ void runMultiWindow(
|
||||
);
|
||||
// we do not hide titlebar on win7 because of the frame overflow.
|
||||
if (kUseCompatibleUiMode) {
|
||||
WindowController.fromWindowId(windowId!).showTitleBar(true);
|
||||
WindowController.fromWindowId(kWindowId!).showTitleBar(true);
|
||||
}
|
||||
switch (appType) {
|
||||
case kAppTypeDesktopRemote:
|
||||
await restoreWindowPosition(WindowType.RemoteDesktop,
|
||||
windowId: windowId!);
|
||||
windowId: kWindowId!);
|
||||
break;
|
||||
case kAppTypeDesktopFileTransfer:
|
||||
await restoreWindowPosition(WindowType.FileTransfer, windowId: windowId!);
|
||||
await restoreWindowPosition(WindowType.FileTransfer,
|
||||
windowId: kWindowId!);
|
||||
break;
|
||||
case kAppTypeDesktopPortForward:
|
||||
await restoreWindowPosition(WindowType.PortForward, windowId: windowId!);
|
||||
await restoreWindowPosition(WindowType.PortForward, windowId: kWindowId!);
|
||||
break;
|
||||
default:
|
||||
// no such appType
|
||||
exit(0);
|
||||
}
|
||||
// show window from hidden status
|
||||
WindowController.fromWindowId(windowId!).show();
|
||||
WindowController.fromWindowId(windowId!).setTitle(title);
|
||||
WindowController.fromWindowId(kWindowId!).show();
|
||||
}
|
||||
|
||||
void runConnectionManagerScreen(bool hide) async {
|
||||
|
@ -62,7 +62,8 @@ class RustDeskMultiWindowManager {
|
||||
remoteDesktopController
|
||||
..setFrame(const Offset(0, 0) & const Size(1280, 720))
|
||||
..center()
|
||||
..setTitle("rustdesk - remote desktop")
|
||||
..setTitle(getWindowNameWithId(remoteId,
|
||||
overrideType: WindowType.RemoteDesktop))
|
||||
..show();
|
||||
registerActiveWindow(remoteDesktopController.windowId);
|
||||
_remoteDesktopWindowId = remoteDesktopController.windowId;
|
||||
@ -88,7 +89,8 @@ class RustDeskMultiWindowManager {
|
||||
fileTransferController
|
||||
..setFrame(const Offset(0, 0) & const Size(1280, 720))
|
||||
..center()
|
||||
..setTitle("rustdesk - file transfer")
|
||||
..setTitle(getWindowNameWithId(remoteId,
|
||||
overrideType: WindowType.FileTransfer))
|
||||
..show();
|
||||
registerActiveWindow(fileTransferController.windowId);
|
||||
_fileTransferWindowId = fileTransferController.windowId;
|
||||
@ -114,7 +116,8 @@ class RustDeskMultiWindowManager {
|
||||
portForwardController
|
||||
..setFrame(const Offset(0, 0) & const Size(1280, 720))
|
||||
..center()
|
||||
..setTitle("rustdesk - port forward")
|
||||
..setTitle(
|
||||
getWindowNameWithId(remoteId, overrideType: WindowType.PortForward))
|
||||
..show();
|
||||
registerActiveWindow(portForwardController.windowId);
|
||||
_portForwardWindowId = portForwardController.windowId;
|
||||
|
@ -96,10 +96,10 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
||||
|
||||
flutter::DartProject project(L"data");
|
||||
// connection manager hide icon from taskbar
|
||||
bool showOnTaskBar = true;
|
||||
bool is_cm_page = false;
|
||||
auto cmParam = std::string("--cm");
|
||||
if (!command_line_arguments.empty() && command_line_arguments.front().compare(0, cmParam.size(), cmParam.c_str()) == 0) {
|
||||
showOnTaskBar = false;
|
||||
is_cm_page = true;
|
||||
}
|
||||
command_line_arguments.insert(command_line_arguments.end(), rust_args.begin(), rust_args.end());
|
||||
project.set_dart_entrypoint_arguments(std::move(command_line_arguments));
|
||||
@ -107,9 +107,10 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
||||
FlutterWindow window(project);
|
||||
Win32Window::Point origin(10, 10);
|
||||
Win32Window::Size size(800, 600);
|
||||
if (!window.CreateAndShow(L"RustDesk", origin, size, showOnTaskBar))
|
||||
{
|
||||
return EXIT_FAILURE;
|
||||
if (!window.CreateAndShow(
|
||||
is_cm_page ? L"RustDesk - Connection Manager" : L"RustDesk", origin,
|
||||
size, !is_cm_page)) {
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
window.SetQuitOnClose(true);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user