diff --git a/src/gui/kernel/qplatformintegration.cpp b/src/gui/kernel/qplatformintegration.cpp index a53f0d09d7..310df05d6d 100644 --- a/src/gui/kernel/qplatformintegration.cpp +++ b/src/gui/kernel/qplatformintegration.cpp @@ -283,7 +283,7 @@ QPlatformServices *QPlatformIntegration::services() const bool QPlatformIntegration::hasCapability(Capability cap) const { - return cap == NonFullScreenWindows || cap == NativeWidgets || cap == WindowManagement + return cap == NonFullScreenWindows || cap == NativeWidgets || cap == WindowManagement /*|| cap == KnownWindowGeometry*/ || cap == TopStackedNativeChildWindows || cap == WindowActivation || cap == RhiBasedRendering; } diff --git a/src/gui/kernel/qplatformintegration.h b/src/gui/kernel/qplatformintegration.h index 75b942f998..f006a7bb07 100644 --- a/src/gui/kernel/qplatformintegration.h +++ b/src/gui/kernel/qplatformintegration.h @@ -133,7 +133,8 @@ public: OpenGLOnRasterSurface, MaximizeUsingFullscreenGeometry, PaintEvents, - RhiBasedRendering + RhiBasedRendering, + KnownWindowGeometry }; virtual ~QPlatformIntegration() { } diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index d93f43a310..1c65231d86 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -531,7 +531,7 @@ void QWindowPrivate::create(bool recursive, WId nativeHandle) // QPlatformWindow will poll geometry() during construction below. Set the // screen here so that high-dpi scaling will use the correct scale factor. - if (q->isTopLevel()) { + if (q->isTopLevel() && QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::KnownWindowGeometry)) { if (QScreen *screen = screenForGeometry(geometry)) setTopLevelScreen(screen, false); } @@ -1733,15 +1733,19 @@ void QWindow::setGeometry(const QRect &rect) d->positionPolicy = QWindowPrivate::WindowFrameExclusive; if (d->platformWindow) { - QScreen *newScreen = d->screenForGeometry(rect); - if (newScreen && isTopLevel()) - d->setTopLevelScreen(newScreen, true); - QRect nativeRect; - if (newScreen && isTopLevel()) - nativeRect = QHighDpi::toNativePixels(rect, newScreen); - else - nativeRect = QHighDpi::toNativeLocalPosition(rect, newScreen); + if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::KnownWindowGeometry)) { + QScreen *newScreen = d->screenForGeometry(rect); + if (newScreen && isTopLevel()) + d->setTopLevelScreen(newScreen, true); + + if (newScreen && isTopLevel()) + nativeRect = QHighDpi::toNativePixels(rect, newScreen); + else + nativeRect = QHighDpi::toNativeLocalPosition(rect, newScreen); + } else { + nativeRect = rect; + } d->platformWindow->setGeometry(nativeRect); } else { d->geometry = rect;