Merge pull request #2920 from Kingtous/master

opt: show remote alias/id on taskbar, rename cm window individually
This commit is contained in:
RustDesk 2023-01-23 22:29:29 +08:00 committed by GitHub
commit 32e7f2bb5f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 91 additions and 50 deletions

View File

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

View File

@ -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'],

View File

@ -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'],

View File

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

View File

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

View File

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

View File

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

View File

@ -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 {

View File

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

View File

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