fix saving frame, maximized
Signed-off-by: dignow <linlong1265@gmail.com>
This commit is contained in:
parent
e2fdd69524
commit
26cd24d92f
@ -1394,14 +1394,26 @@ Future<void> saveWindowPosition(WindowType type, {int? windowId}) async {
|
|||||||
late Offset position;
|
late Offset position;
|
||||||
late Size sz;
|
late Size sz;
|
||||||
late bool isMaximized;
|
late bool isMaximized;
|
||||||
|
setFrameIfMaximized() {
|
||||||
|
if (isMaximized) {
|
||||||
|
final pos = bind.getLocalFlutterOption(k: kWindowPrefix + type.name);
|
||||||
|
var lpos = LastWindowPosition.loadFromString(pos);
|
||||||
|
position = Offset(
|
||||||
|
lpos?.offsetWidth ?? position.dx, lpos?.offsetHeight ?? position.dy);
|
||||||
|
sz = Size(lpos?.width ?? sz.width, lpos?.height ?? sz.height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case WindowType.Main:
|
case WindowType.Main:
|
||||||
|
isMaximized = await windowManager.isMaximized();
|
||||||
position = await windowManager.getPosition();
|
position = await windowManager.getPosition();
|
||||||
sz = await windowManager.getSize();
|
sz = await windowManager.getSize();
|
||||||
isMaximized = await windowManager.isMaximized();
|
setFrameIfMaximized();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
final wc = WindowController.fromWindowId(windowId!);
|
final wc = WindowController.fromWindowId(windowId!);
|
||||||
|
isMaximized = await wc.isMaximized();
|
||||||
final Rect frame;
|
final Rect frame;
|
||||||
try {
|
try {
|
||||||
frame = await wc.getFrame();
|
frame = await wc.getFrame();
|
||||||
@ -1411,7 +1423,7 @@ Future<void> saveWindowPosition(WindowType type, {int? windowId}) async {
|
|||||||
}
|
}
|
||||||
position = frame.topLeft;
|
position = frame.topLeft;
|
||||||
sz = frame.size;
|
sz = frame.size;
|
||||||
isMaximized = await wc.isMaximized();
|
setFrameIfMaximized();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (Platform.isWindows) {
|
if (Platform.isWindows) {
|
||||||
@ -1429,24 +1441,43 @@ Future<void> saveWindowPosition(WindowType type, {int? windowId}) async {
|
|||||||
final pos = LastWindowPosition(
|
final pos = LastWindowPosition(
|
||||||
sz.width, sz.height, position.dx, position.dy, isMaximized);
|
sz.width, sz.height, position.dx, position.dy, isMaximized);
|
||||||
debugPrint(
|
debugPrint(
|
||||||
"Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}");
|
"Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}, isMaximized:${pos.isMaximized}");
|
||||||
|
|
||||||
await bind.setLocalFlutterOption(
|
await bind.setLocalFlutterOption(
|
||||||
k: kWindowPrefix + type.name, v: pos.toString());
|
k: kWindowPrefix + type.name, v: pos.toString());
|
||||||
|
|
||||||
if (type == WindowType.RemoteDesktop && windowId != null) {
|
if (type == WindowType.RemoteDesktop && windowId != null) {
|
||||||
await _saveSessionWindowPosition(type, windowId, pos);
|
await _saveSessionWindowPosition(type, windowId, isMaximized, pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future _saveSessionWindowPosition(
|
Future _saveSessionWindowPosition(WindowType windowType, int windowId,
|
||||||
WindowType windowType, int windowId, LastWindowPosition pos) async {
|
bool isMaximized, LastWindowPosition pos) async {
|
||||||
final remoteList = await DesktopMultiWindow.invokeMethod(
|
final remoteList = await DesktopMultiWindow.invokeMethod(
|
||||||
windowId, kWindowEventGetRemoteList, null);
|
windowId, kWindowEventGetRemoteList, null);
|
||||||
|
getPeerPos(String peerId) {
|
||||||
|
if (isMaximized) {
|
||||||
|
final peerPos = bind.mainGetPeerFlutterOptionSync(
|
||||||
|
id: peerId, k: kWindowPrefix + windowType.name);
|
||||||
|
var lpos = LastWindowPosition.loadFromString(peerPos);
|
||||||
|
return LastWindowPosition(
|
||||||
|
lpos?.width ?? pos.offsetWidth,
|
||||||
|
lpos?.height ?? pos.offsetHeight,
|
||||||
|
lpos?.offsetWidth ?? pos.offsetWidth,
|
||||||
|
lpos?.offsetHeight ?? pos.offsetHeight,
|
||||||
|
isMaximized)
|
||||||
|
.toString();
|
||||||
|
} else {
|
||||||
|
return pos.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (remoteList != null) {
|
if (remoteList != null) {
|
||||||
for (final peerId in remoteList.split(',')) {
|
for (final peerId in remoteList.split(',')) {
|
||||||
bind.mainSetPeerFlutterOptionSync(
|
bind.mainSetPeerFlutterOptionSync(
|
||||||
id: peerId, k: kWindowPrefix + windowType.name, v: pos.toString());
|
id: peerId,
|
||||||
|
k: kWindowPrefix + windowType.name,
|
||||||
|
v: getPeerPos(peerId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1529,7 +1560,7 @@ Future<Offset?> _adjustRestoreMainWindowOffset(
|
|||||||
if ((left + minWidth) > frameRight! ||
|
if ((left + minWidth) > frameRight! ||
|
||||||
(top + minWidth) > frameBottom! ||
|
(top + minWidth) > frameBottom! ||
|
||||||
(left + width - minWidth) < frameLeft ||
|
(left + width - minWidth) < frameLeft ||
|
||||||
(top - minWidth) < frameTop!) {
|
top < frameTop!) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
return Offset(left, top);
|
return Offset(left, top);
|
||||||
@ -1586,34 +1617,7 @@ Future<bool> restoreWindowPosition(WindowType type,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (type) {
|
final size = await _adjustRestoreMainWindowSize(lpos.width, lpos.height);
|
||||||
case WindowType.Main:
|
|
||||||
if (lpos.isMaximized == true) {
|
|
||||||
await windowManager.maximize();
|
|
||||||
} else {
|
|
||||||
final size =
|
|
||||||
await _adjustRestoreMainWindowSize(lpos.width, lpos.height);
|
|
||||||
final offset = await _adjustRestoreMainWindowOffset(
|
|
||||||
lpos.offsetWidth,
|
|
||||||
lpos.offsetHeight,
|
|
||||||
size.width,
|
|
||||||
size.height,
|
|
||||||
);
|
|
||||||
await windowManager.setSize(size);
|
|
||||||
if (offset == null) {
|
|
||||||
await windowManager.center();
|
|
||||||
} else {
|
|
||||||
await windowManager.setPosition(offset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
final wc = WindowController.fromWindowId(windowId!);
|
|
||||||
if (lpos.isMaximized == true) {
|
|
||||||
await wc.maximize();
|
|
||||||
} else {
|
|
||||||
final size =
|
|
||||||
await _adjustRestoreMainWindowSize(lpos.width, lpos.height);
|
|
||||||
final offset = await _adjustRestoreMainWindowOffset(
|
final offset = await _adjustRestoreMainWindowOffset(
|
||||||
lpos.offsetWidth,
|
lpos.offsetWidth,
|
||||||
lpos.offsetHeight,
|
lpos.offsetHeight,
|
||||||
@ -1622,6 +1626,27 @@ Future<bool> restoreWindowPosition(WindowType type,
|
|||||||
);
|
);
|
||||||
debugPrint(
|
debugPrint(
|
||||||
"restore lpos: ${size.width}/${size.height}, offset:${offset?.dx}/${offset?.dy}");
|
"restore lpos: ${size.width}/${size.height}, offset:${offset?.dx}/${offset?.dy}");
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case WindowType.Main:
|
||||||
|
restorePos() async {
|
||||||
|
if (offset == null) {
|
||||||
|
await windowManager.center();
|
||||||
|
} else {
|
||||||
|
await windowManager.setPosition(offset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (lpos.isMaximized == true) {
|
||||||
|
await restorePos();
|
||||||
|
await windowManager.maximize();
|
||||||
|
} else {
|
||||||
|
await windowManager.setSize(size);
|
||||||
|
await restorePos();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
final wc = WindowController.fromWindowId(windowId!);
|
||||||
|
restoreFrame() async {
|
||||||
if (offset == null) {
|
if (offset == null) {
|
||||||
await wc.center();
|
await wc.center();
|
||||||
} else {
|
} else {
|
||||||
@ -1630,6 +1655,12 @@ Future<bool> restoreWindowPosition(WindowType type,
|
|||||||
await wc.setFrame(frame);
|
await wc.setFrame(frame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (lpos.isMaximized == true) {
|
||||||
|
await restoreFrame();
|
||||||
|
await wc.maximize();
|
||||||
|
} else {
|
||||||
|
await restoreFrame();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user