fix: last window location calculation
This commit is contained in:
parent
2af6441495
commit
200d8dc0f5
flutter/lib
@ -1,6 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
import 'dart:math';
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
import 'package:back_button_interceptor/back_button_interceptor.dart';
|
import 'package:back_button_interceptor/back_button_interceptor.dart';
|
||||||
@ -1036,6 +1037,7 @@ Future<void> saveWindowPosition(WindowType type, {int? windowId}) async {
|
|||||||
final isMaximized = await wc.isMaximized();
|
final isMaximized = await wc.isMaximized();
|
||||||
final pos = LastWindowPosition(
|
final pos = LastWindowPosition(
|
||||||
sz.width, sz.height, position.dx, position.dy, isMaximized);
|
sz.width, sz.height, position.dx, position.dy, isMaximized);
|
||||||
|
print("saving frame: ${windowId}: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}");
|
||||||
await Get.find<SharedPreferences>()
|
await Get.find<SharedPreferences>()
|
||||||
.setString(kWindowPrefix + type.name, pos.toString());
|
.setString(kWindowPrefix + type.name, pos.toString());
|
||||||
break;
|
break;
|
||||||
@ -1081,7 +1083,7 @@ Future<Size> _adjustRestoreMainWindowSize(double? width, double? height) async {
|
|||||||
restoreWidth = maxWidth;
|
restoreWidth = maxWidth;
|
||||||
}
|
}
|
||||||
if (restoreHeight > maxHeight) {
|
if (restoreHeight > maxHeight) {
|
||||||
restoreWidth = maxHeight;
|
restoreHeight = maxHeight;
|
||||||
}
|
}
|
||||||
return Size(restoreWidth, restoreHeight);
|
return Size(restoreWidth, restoreHeight);
|
||||||
}
|
}
|
||||||
@ -1092,11 +1094,11 @@ Future<Offset?> _adjustRestoreMainWindowOffset(
|
|||||||
if (left == null || top == null) {
|
if (left == null || top == null) {
|
||||||
await windowManager.center();
|
await windowManager.center();
|
||||||
} else {
|
} else {
|
||||||
double windowLeft = left;
|
double windowLeft = max(0.0, left);
|
||||||
double windowTop = top;
|
double windowTop = max(0.0, top);
|
||||||
|
|
||||||
double frameLeft = 0;
|
double frameLeft = double.infinity;
|
||||||
double frameTop = 0;
|
double frameTop = double.infinity;
|
||||||
double frameRight = ((isDesktop || isWebDesktop)
|
double frameRight = ((isDesktop || isWebDesktop)
|
||||||
? kDesktopMaxDisplayWidth
|
? kDesktopMaxDisplayWidth
|
||||||
: kMobileMaxDisplayWidth)
|
: kMobileMaxDisplayWidth)
|
||||||
@ -1107,12 +1109,11 @@ Future<Offset?> _adjustRestoreMainWindowOffset(
|
|||||||
.toDouble();
|
.toDouble();
|
||||||
|
|
||||||
if (isDesktop || isWebDesktop) {
|
if (isDesktop || isWebDesktop) {
|
||||||
final screen = (await window_size.getWindowInfo()).screen;
|
for(final screen in await window_size.getScreenList()) {
|
||||||
if (screen != null) {
|
frameLeft = min(screen.visibleFrame.left, frameLeft);
|
||||||
frameLeft = screen.visibleFrame.left;
|
frameTop = min(screen.visibleFrame.top, frameTop);
|
||||||
frameTop = screen.visibleFrame.top;
|
frameRight = max(screen.visibleFrame.right, frameRight);
|
||||||
frameRight = screen.visibleFrame.right;
|
frameBottom = max(screen.visibleFrame.bottom, frameBottom);
|
||||||
frameBottom = screen.visibleFrame.bottom;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1174,6 +1175,7 @@ Future<bool> restoreWindowPosition(WindowType type, {int? windowId}) async {
|
|||||||
await _adjustRestoreMainWindowSize(lpos.width, lpos.height);
|
await _adjustRestoreMainWindowSize(lpos.width, lpos.height);
|
||||||
final offset = await _adjustRestoreMainWindowOffset(
|
final offset = await _adjustRestoreMainWindowOffset(
|
||||||
lpos.offsetWidth, lpos.offsetHeight);
|
lpos.offsetWidth, lpos.offsetHeight);
|
||||||
|
print("restore lpos: ${size.width}/${size.height}, offset:${offset?.dx}/${offset?.dy}");
|
||||||
if (offset == null) {
|
if (offset == null) {
|
||||||
await wc.center();
|
await wc.center();
|
||||||
} else {
|
} else {
|
||||||
|
@ -96,8 +96,7 @@ class _FileManagerTabPageState extends State<FileManagerTabPage> {
|
|||||||
|
|
||||||
void onRemoveId(String id) {
|
void onRemoveId(String id) {
|
||||||
if (tabController.state.value.tabs.isEmpty) {
|
if (tabController.state.value.tabs.isEmpty) {
|
||||||
WindowController.fromWindowId(windowId()).hide();
|
WindowController.fromWindowId(windowId()).close();
|
||||||
rustDeskWinManager.call(WindowType.Main, kWindowEventHide, {"id": windowId()});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,8 +107,7 @@ class _PortForwardTabPageState extends State<PortForwardTabPage> {
|
|||||||
|
|
||||||
void onRemoveId(String id) {
|
void onRemoveId(String id) {
|
||||||
if (tabController.state.value.tabs.isEmpty) {
|
if (tabController.state.value.tabs.isEmpty) {
|
||||||
WindowController.fromWindowId(windowId()).hide();
|
WindowController.fromWindowId(windowId()).close();
|
||||||
rustDeskWinManager.call(WindowType.Main, kWindowEventHide, {"id": windowId()});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,9 +97,6 @@ class _ConnectionTabPageState extends State<ConnectionTabPage> {
|
|||||||
}
|
}
|
||||||
_update_remote_count();
|
_update_remote_count();
|
||||||
});
|
});
|
||||||
Future.delayed(Duration.zero, () {
|
|
||||||
restoreWindowPosition(WindowType.RemoteDesktop, windowId: windowId());
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -321,10 +318,9 @@ class _ConnectionTabPageState extends State<ConnectionTabPage> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void onRemoveId(String id) {
|
void onRemoveId(String id) async {
|
||||||
if (tabController.state.value.tabs.isEmpty) {
|
if (tabController.state.value.tabs.isEmpty) {
|
||||||
WindowController.fromWindowId(windowId()).hide();
|
await WindowController.fromWindowId(windowId()).close();
|
||||||
rustDeskWinManager.call(WindowType.Main, kWindowEventHide, {"id": windowId()});
|
|
||||||
}
|
}
|
||||||
ConnectionTypeState.delete(id);
|
ConnectionTypeState.delete(id);
|
||||||
_update_remote_count();
|
_update_remote_count();
|
||||||
|
@ -500,15 +500,19 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onWindowClose() async {
|
void onWindowClose() async {
|
||||||
|
print("onWindowClose");
|
||||||
// hide window on close
|
// hide window on close
|
||||||
if (widget.isMainWindow) {
|
if (widget.isMainWindow) {
|
||||||
await windowManager.hide();
|
await windowManager.hide();
|
||||||
rustDeskWinManager.unregisterActiveWindow(0);
|
rustDeskWinManager.unregisterActiveWindow(0);
|
||||||
} else {
|
} else {
|
||||||
widget.onClose?.call();
|
widget.onClose?.call();
|
||||||
WindowController.fromWindowId(windowId!).hide();
|
final frame = await WindowController.fromWindowId(windowId!).getFrame();
|
||||||
|
await WindowController.fromWindowId(windowId!).hide();
|
||||||
rustDeskWinManager
|
rustDeskWinManager
|
||||||
.call(WindowType.Main, kWindowEventHide, {"id": windowId!});
|
.call(WindowType.Main, kWindowEventHide, {"id": windowId!});
|
||||||
|
final frame2 = await WindowController.fromWindowId(windowId!).getFrame();
|
||||||
|
print("${frame} ---hide--> ${frame2}");
|
||||||
}
|
}
|
||||||
super.onWindowClose();
|
super.onWindowClose();
|
||||||
}
|
}
|
||||||
@ -555,12 +559,9 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
|||||||
// note: the main window can be restored by tray icon
|
// note: the main window can be restored by tray icon
|
||||||
Future.delayed(Duration.zero, () async {
|
Future.delayed(Duration.zero, () async {
|
||||||
if (widget.isMainWindow) {
|
if (widget.isMainWindow) {
|
||||||
await windowManager.hide();
|
await windowManager.close();
|
||||||
rustDeskWinManager.unregisterActiveWindow(0);
|
|
||||||
} else {
|
} else {
|
||||||
await WindowController.fromWindowId(windowId!).hide();
|
await WindowController.fromWindowId(windowId!).close();
|
||||||
rustDeskWinManager.call(
|
|
||||||
WindowType.Main, kWindowEventHide, {"id": windowId!});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -168,6 +168,20 @@ void runMultiWindow(
|
|||||||
widget,
|
widget,
|
||||||
MyTheme.currentThemeMode(),
|
MyTheme.currentThemeMode(),
|
||||||
);
|
);
|
||||||
|
switch (appType) {
|
||||||
|
case kAppTypeDesktopRemote:
|
||||||
|
await restoreWindowPosition(WindowType.RemoteDesktop, windowId: windowId!);
|
||||||
|
break;
|
||||||
|
case kAppTypeDesktopFileTransfer:
|
||||||
|
await restoreWindowPosition(WindowType.FileTransfer, windowId: windowId!);
|
||||||
|
break;
|
||||||
|
case kAppTypeDesktopPortForward:
|
||||||
|
await restoreWindowPosition(WindowType.PortForward, windowId: windowId!);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// no such appType
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void runConnectionManagerScreen() async {
|
void runConnectionManagerScreen() async {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user