Merge pull request #5125 from dignow/fix/window_save_pos
Fix/window save pos
This commit is contained in:
commit
88efd13acb
@ -1363,15 +1363,19 @@ Future<void> saveWindowPosition(WindowType type, {int? windowId}) async {
|
|||||||
debugPrint(
|
debugPrint(
|
||||||
"Error: windowId cannot be null when saving positions for sub window");
|
"Error: windowId cannot be null when saving positions for sub window");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
late Offset position;
|
||||||
|
late Size sz;
|
||||||
|
late bool isMaximized;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case WindowType.Main:
|
case WindowType.Main:
|
||||||
final position = await windowManager.getPosition();
|
position = await windowManager.getPosition();
|
||||||
final sz = await windowManager.getSize();
|
if (position.dx < 0 || position.dy < 0) {
|
||||||
final isMaximized = await windowManager.isMaximized();
|
debugPrint("Main window is hidden, ignoring position restoration");
|
||||||
final pos = LastWindowPosition(
|
return;
|
||||||
sz.width, sz.height, position.dx, position.dy, isMaximized);
|
}
|
||||||
await bind.setLocalFlutterConfig(
|
sz = await windowManager.getSize();
|
||||||
k: kWindowPrefix + type.name, v: pos.toString());
|
isMaximized = await windowManager.isMaximized();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
final wc = WindowController.fromWindowId(windowId!);
|
final wc = WindowController.fromWindowId(windowId!);
|
||||||
@ -1382,17 +1386,22 @@ Future<void> saveWindowPosition(WindowType type, {int? windowId}) async {
|
|||||||
debugPrint("Failed to get frame of window $windowId, it may be hidden");
|
debugPrint("Failed to get frame of window $windowId, it may be hidden");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final position = frame.topLeft;
|
position = frame.topLeft;
|
||||||
final sz = frame.size;
|
if (position.dx < 0 || position.dy < 0) {
|
||||||
final isMaximized = await wc.isMaximized();
|
debugPrint("Window $windowId is hidden, ignoring position restoration");
|
||||||
final pos = LastWindowPosition(
|
return;
|
||||||
sz.width, sz.height, position.dx, position.dy, isMaximized);
|
}
|
||||||
debugPrint(
|
sz = frame.size;
|
||||||
"saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}");
|
isMaximized = await wc.isMaximized();
|
||||||
await bind.setLocalFlutterConfig(
|
|
||||||
k: kWindowPrefix + type.name, v: pos.toString());
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final pos = LastWindowPosition(
|
||||||
|
sz.width, sz.height, position.dx, position.dy, isMaximized);
|
||||||
|
debugPrint(
|
||||||
|
"Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}");
|
||||||
|
await bind.setLocalFlutterConfig(
|
||||||
|
k: kWindowPrefix + type.name, v: pos.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Size> _adjustRestoreMainWindowSize(double? width, double? height) async {
|
Future<Size> _adjustRestoreMainWindowSize(double? width, double? height) async {
|
||||||
@ -1864,10 +1873,14 @@ Future<void> onActiveWindowChanged() async {
|
|||||||
if (rustDeskWinManager.getActiveWindows().isEmpty) {
|
if (rustDeskWinManager.getActiveWindows().isEmpty) {
|
||||||
// close all sub windows
|
// close all sub windows
|
||||||
try {
|
try {
|
||||||
await Future.wait([
|
if (Platform.isLinux) {
|
||||||
saveWindowPosition(WindowType.Main),
|
await Future.wait([
|
||||||
rustDeskWinManager.closeAllSubWindows()
|
saveWindowPosition(WindowType.Main),
|
||||||
]);
|
rustDeskWinManager.closeAllSubWindows()
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
await rustDeskWinManager.closeAllSubWindows();
|
||||||
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
debugPrintStack(label: "$err");
|
debugPrintStack(label: "$err");
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -478,6 +478,8 @@ class WindowActionPanel extends StatefulWidget {
|
|||||||
|
|
||||||
class WindowActionPanelState extends State<WindowActionPanel>
|
class WindowActionPanelState extends State<WindowActionPanel>
|
||||||
with MultiWindowListener, WindowListener {
|
with MultiWindowListener, WindowListener {
|
||||||
|
final _saveFrameDebounce = Debouncer(delay: Duration(seconds: 1));
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
@ -537,6 +539,26 @@ class WindowActionPanelState extends State<WindowActionPanel>
|
|||||||
super.onWindowUnmaximize();
|
super.onWindowUnmaximize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_saveFrame() async {
|
||||||
|
if (widget.tabType == DesktopTabType.main) {
|
||||||
|
await saveWindowPosition(WindowType.Main);
|
||||||
|
} else if (kWindowType != null && kWindowId != null) {
|
||||||
|
await saveWindowPosition(kWindowType!, windowId: kWindowId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onWindowMoved() {
|
||||||
|
_saveFrameDebounce.call(_saveFrame);
|
||||||
|
super.onWindowMoved();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onWindowResized() {
|
||||||
|
_saveFrameDebounce.call(_saveFrame);
|
||||||
|
super.onWindowMoved();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onWindowClose() async {
|
void onWindowClose() async {
|
||||||
// hide window on close
|
// hide window on close
|
||||||
|
@ -327,7 +327,7 @@ packages:
|
|||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: HEAD
|
ref: HEAD
|
||||||
resolved-ref: aee670819f5fe7e8b0f05e0239dafb5c62f7a84b
|
resolved-ref: 6c4181330f4ed80c1cb5670bd61aa75115f9f748
|
||||||
url: "https://github.com/rustdesk-org/rustdesk_desktop_multi_window"
|
url: "https://github.com/rustdesk-org/rustdesk_desktop_multi_window"
|
||||||
source: git
|
source: git
|
||||||
version: "0.1.0"
|
version: "0.1.0"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user