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,
 | 
			
		||||
@ -77,6 +81,7 @@ class _ConnectionTabPageState extends State<ConnectionTabPage> {
 | 
			
		||||
 | 
			
		||||
    tabController.onRemoved = (_, id) => onRemoveId(id);
 | 
			
		||||
   
 | 
			
		||||
 | 
			
		||||
    rustDeskWinManager.setMethodHandler((call, fromWindowId) async {
 | 
			
		||||
      print(
 | 
			
		||||
          "[Remote Page] call ${call.method} with args ${call.arguments} from window $fromWindowId");
 | 
			
		||||
 | 
			
		||||
@ -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,8 +107,9 @@ 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))
 | 
			
		||||
  {
 | 
			
		||||
  if (!window.CreateAndShow(
 | 
			
		||||
          is_cm_page ? L"RustDesk - Connection Manager" : L"RustDesk", origin,
 | 
			
		||||
          size, !is_cm_page)) {
 | 
			
		||||
      return EXIT_FAILURE;
 | 
			
		||||
  }
 | 
			
		||||
  window.SetQuitOnClose(true);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user