Determine screen with initialGeometry when not positioning automatically

Popups aren't automatically positioned, so use the screen at the initial
geometry for scaling. Otherwise we may end up with the wrong geometry on
systems that have multiple screens with different scales.

Pick-to: 6.8
Fixes: QTBUG-134139
Change-Id: I686b1c8ab6cf458d9b849b529ba247ac8c3be064
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
(cherry picked from commit 7dc2532bed8977dd4166e9aa4be021b0ec39b5ba)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Mauro Persano 2025-02-28 14:17:19 -03:00 committed by Qt Cherry-pick Bot
parent ab628edbb0
commit 9b8655cf0d

View File

@ -702,10 +702,10 @@ QRect QPlatformWindow::initialGeometry(const QWindow *w, const QRect &initialGeo
return QRect(initialGeometry.topLeft(), QHighDpi::toNative(deviceIndependentSize, factor));
}
const auto *wp = qt_window_private(const_cast<QWindow*>(w));
const bool position = wp->positionAutomatic && w->type() != Qt::Popup;
if (!position && !wp->resizeAutomatic)
const bool positionAutomatic = wp->positionAutomatic && w->type() != Qt::Popup;
if (!positionAutomatic && !wp->resizeAutomatic)
return initialGeometry;
const QScreen *screen = wp->positionAutomatic
const QScreen *screen = positionAutomatic
? effectiveScreen(w)
: QGuiApplication::screenAt(initialGeometry.center());
if (!screen)
@ -717,7 +717,7 @@ QRect QPlatformWindow::initialGeometry(const QWindow *w, const QRect &initialGeo
if (wp->resizeAutomatic)
deviceIndependentRect.setSize(
fixInitialSize(deviceIndependentRect.size(), w, defaultWidth, defaultHeight));
if (position) {
if (positionAutomatic) {
const QRect availableDeviceIndependentGeometry = screen->availableGeometry();
// Center unless the geometry ( + unknown window frame) is too large for the screen).
if (deviceIndependentRect.height() < (availableDeviceIndependentGeometry.height() * 8) / 9