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