diff --git a/src/gui/kernel/qplatformwindow.cpp b/src/gui/kernel/qplatformwindow.cpp
index d23cfde17235b750e6382e9371f58d43469585c4..4c0d68e7c15e9621e9542e2097a3fddd7f2c60ea 100644
--- a/src/gui/kernel/qplatformwindow.cpp
+++ b/src/gui/kernel/qplatformwindow.cpp
@@ -510,15 +510,21 @@ QRect QPlatformWindow::initialGeometry(const QWindow *w,
         }
     }
     if (w->isTopLevel() && qt_window_private(const_cast<QWindow*>(w))->positionAutomatic) {
-        const QWindow *tp = w->transientParent();
-        if (tp) {
-            // A transient window should be centered w.r.t. its transient parent.
-            rect.moveCenter(tp->geometry().center());
-        } else {
-            // Center the window on the screen.  (Only applicable on platforms
-            // which do not provide a better way.)
-            QPlatformScreen *scr = QPlatformScreen::platformScreenForWindow(w);
-            rect.moveCenter(scr->availableGeometry().center());
+        if (const QPlatformScreen *platformScreen = QPlatformScreen::platformScreenForWindow(w)) {
+            const QRect availableGeometry = platformScreen->availableGeometry();
+            // Center unless the geometry ( + unknown window frame) is too large for the screen).
+            if (rect.height() < (availableGeometry.height() * 8) / 9
+                && rect.width() < (availableGeometry.width() * 8) / 9) {
+                const QWindow *tp = w->transientParent();
+                if (tp) {
+                    // A transient window should be centered w.r.t. its transient parent.
+                    rect.moveCenter(tp->geometry().center());
+                } else {
+                    // Center the window on the screen.  (Only applicable on platforms
+                    // which do not provide a better way.)
+                    rect.moveCenter(availableGeometry.center());
+                }
+            }
         }
     }
     return rect;
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 8ce6dcc9e770f45eca928257cf0dd4fd798ac33d..9d817c2043b257b63ec32161acefe2bb8948535e 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -503,15 +503,6 @@ QWindowsWindow::WindowData
     const QWindowCreationContextPtr context(new QWindowCreationContext(w, rect, data.customMargins, style, exStyle));
     QWindowsContext::instance()->setWindowCreationContext(context);
 
-    QRect screenGeometry;
-    if (QScreen *screen = w->screen())
-        screenGeometry = screen->availableVirtualGeometry();
-
-    if (context->frameX < screenGeometry.left())
-        context->frameX = screenGeometry.left();
-    if (context->frameY < screenGeometry.top())
-        context->frameY = screenGeometry.top();
-
     if (QWindowsContext::verboseWindows)
         qDebug().nospace()
                 << "CreateWindowEx: " << w << *this