@@ -856,7 +856,12 @@ void LayoutSaver::MainWindow::scaleSizes()
856
856
return ;
857
857
}
858
858
859
- scalingInfo = ScalingInfo (uniqueName, geometry, screenIndex);
859
+ // This follows the same logic as in deserializeWindowGeometry()
860
+ QRect savedGeometry = !isNormalWindowState (windowState) ? normalGeometry : geometry;
861
+ QRect realGeometry = savedGeometry;
862
+ ::FloatingWindow::ensureRectIsOnScreen (realGeometry);
863
+
864
+ scalingInfo = ScalingInfo (uniqueName, savedGeometry, realGeometry, screenIndex);
860
865
}
861
866
862
867
QVariantMap LayoutSaver::MainWindow::toVariantMap () const
@@ -1033,7 +1038,7 @@ void LayoutSaver::Placeholder::fromVariantMap(const QVariantMap &map)
1033
1038
mainWindowUniqueName = map.value (QStringLiteral (" mainWindowUniqueName" )).toString ();
1034
1039
}
1035
1040
1036
- LayoutSaver::ScalingInfo::ScalingInfo (const QString &mainWindowId, QRect savedMainWindowGeo, int screenIndex)
1041
+ LayoutSaver::ScalingInfo::ScalingInfo (const QString &mainWindowId, QRect savedMainWindowGeo, QRect realMainWindowGeometry, int screenIndex)
1037
1042
{
1038
1043
auto mainWindow = DockRegistry::self ()->mainWindowByName (mainWindowId);
1039
1044
if (!mainWindow) {
@@ -1046,6 +1051,11 @@ LayoutSaver::ScalingInfo::ScalingInfo(const QString &mainWindowId, QRect savedMa
1046
1051
return ;
1047
1052
}
1048
1053
1054
+ if (!realMainWindowGeometry.isValid () || realMainWindowGeometry.isNull ()) {
1055
+ qWarning () << Q_FUNC_INFO << " Invalid real main window geometry" << realMainWindowGeometry;
1056
+ return ;
1057
+ }
1058
+
1049
1059
if (!mainWindow->geometry ().isValid () || mainWindow->geometry ().isNull ()) {
1050
1060
qWarning () << Q_FUNC_INFO << " Invalid main window geometry" << mainWindow->geometry ();
1051
1061
return ;
@@ -1055,7 +1065,7 @@ LayoutSaver::ScalingInfo::ScalingInfo(const QString &mainWindowId, QRect savedMa
1055
1065
1056
1066
this ->mainWindowName = mainWindowId;
1057
1067
this ->savedMainWindowGeometry = savedMainWindowGeo;
1058
- realMainWindowGeometry = mainWindow-> window ()-> geometry (); // window() as our main window might be embedded
1068
+ this -> realMainWindowGeometry = realMainWindowGeometry;
1059
1069
widthFactor = double (realMainWindowGeometry.width ()) / savedMainWindowGeo.width ();
1060
1070
heightFactor = double (realMainWindowGeometry.height ()) / savedMainWindowGeo.height ();
1061
1071
mainWindowChangedScreen = currentScreenIndex != screenIndex;
0 commit comments