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
parent
f66c22ff5b
commit
85dc392135
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue