QWidget::restoreGeometry(): Fix Windows being restored out of screen area

Factor out the screen area check to a separate helper and apply to
restoredGeometry, too, fixing an oversight of
2f2bfc4e59.

Change-Id: I795d8d5e3cddb5e986c96c08a342d69063d04970
Fixes: QTBUG-76900
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
bb10
Friedemann Kleint 2019-07-05 09:58:45 +02:00
parent f66c22ff5b
commit 85dc392135
1 changed files with 13 additions and 6 deletions

View File

@ -7451,6 +7451,17 @@ QByteArray QWidget::saveGeometry() const
return array;
}
static void checkRestoredGeometry(const QRect &availableGeometry, QRect *restoredGeometry,
int frameHeight)
{
if (!restoredGeometry->intersects(availableGeometry)) {
restoredGeometry->moveBottom(qMin(restoredGeometry->bottom(), availableGeometry.bottom()));
restoredGeometry->moveLeft(qMax(restoredGeometry->left(), availableGeometry.left()));
restoredGeometry->moveRight(qMin(restoredGeometry->right(), availableGeometry.right()));
}
restoredGeometry->moveTop(qMax(restoredGeometry->top(), availableGeometry.top() + frameHeight));
}
/*!
\since 4.2
@ -7557,12 +7568,8 @@ bool QWidget::restoreGeometry(const QByteArray &geometry)
restoredNormalGeometry.setHeight(qMin(restoredNormalGeometry.height(), availableGeometry.height() - frameHeight));
#endif
if (!restoredNormalGeometry.intersects(availableGeometry)) {
restoredNormalGeometry.moveBottom(qMin(restoredNormalGeometry.bottom(), availableGeometry.bottom()));
restoredNormalGeometry.moveLeft(qMax(restoredNormalGeometry.left(), availableGeometry.left()));
restoredNormalGeometry.moveRight(qMin(restoredNormalGeometry.right(), availableGeometry.right()));
}
restoredNormalGeometry.moveTop(qMax(restoredNormalGeometry.top(), availableGeometry.top() + frameHeight));
checkRestoredGeometry(availableGeometry, &restoredGeometry, frameHeight);
checkRestoredGeometry(availableGeometry, &restoredNormalGeometry, frameHeight);
if (maximized || fullScreen) {
// set geometry before setting the window state to make