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,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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user