Skip to content

Commit f105e63

Browse files
committed
21148: Undocked panels change their sizes between MuseScore sessions
1 parent b50c1de commit f105e63

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

src/framework/dockwindow/thirdparty/KDDockWidgets/src/LayoutSaver.cpp

+13-3
Original file line numberDiff line numberDiff line change
@@ -856,7 +856,12 @@ void LayoutSaver::MainWindow::scaleSizes()
856856
return;
857857
}
858858

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);
860865
}
861866

862867
QVariantMap LayoutSaver::MainWindow::toVariantMap() const
@@ -1033,7 +1038,7 @@ void LayoutSaver::Placeholder::fromVariantMap(const QVariantMap &map)
10331038
mainWindowUniqueName = map.value(QStringLiteral("mainWindowUniqueName")).toString();
10341039
}
10351040

1036-
LayoutSaver::ScalingInfo::ScalingInfo(const QString &mainWindowId, QRect savedMainWindowGeo, int screenIndex)
1041+
LayoutSaver::ScalingInfo::ScalingInfo(const QString &mainWindowId, QRect savedMainWindowGeo, QRect realMainWindowGeometry, int screenIndex)
10371042
{
10381043
auto mainWindow = DockRegistry::self()->mainWindowByName(mainWindowId);
10391044
if (!mainWindow) {
@@ -1046,6 +1051,11 @@ LayoutSaver::ScalingInfo::ScalingInfo(const QString &mainWindowId, QRect savedMa
10461051
return;
10471052
}
10481053

1054+
if (!realMainWindowGeometry.isValid() || realMainWindowGeometry.isNull()) {
1055+
qWarning() << Q_FUNC_INFO << "Invalid real main window geometry" << realMainWindowGeometry;
1056+
return;
1057+
}
1058+
10491059
if (!mainWindow->geometry().isValid() || mainWindow->geometry().isNull()) {
10501060
qWarning() << Q_FUNC_INFO << "Invalid main window geometry" << mainWindow->geometry();
10511061
return;
@@ -1055,7 +1065,7 @@ LayoutSaver::ScalingInfo::ScalingInfo(const QString &mainWindowId, QRect savedMa
10551065

10561066
this->mainWindowName = mainWindowId;
10571067
this->savedMainWindowGeometry = savedMainWindowGeo;
1058-
realMainWindowGeometry = mainWindow->window()->geometry(); // window() as our main window might be embedded
1068+
this->realMainWindowGeometry = realMainWindowGeometry;
10591069
widthFactor = double(realMainWindowGeometry.width()) / savedMainWindowGeo.width();
10601070
heightFactor = double(realMainWindowGeometry.height()) / savedMainWindowGeo.height();
10611071
mainWindowChangedScreen = currentScreenIndex != screenIndex;

src/framework/dockwindow/thirdparty/KDDockWidgets/src/private/LayoutSaver_p.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ struct LayoutSaver::Placeholder
9797
struct LayoutSaver::ScalingInfo
9898
{
9999
ScalingInfo() = default;
100-
explicit ScalingInfo(const QString &mainWindowId, QRect savedMainWindowGeo, int screenIndex);
100+
explicit ScalingInfo(const QString &mainWindowId, QRect savedMainWindowGeo, QRect realMainWindowGeometry, int screenIndex);
101101

102102
bool isValid() const
103103
{

0 commit comments

Comments
 (0)