From d2792d2ed90e1e2789aa80f1667d6e67cd35af66 Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Fri, 30 Oct 2015 15:58:10 +0100 Subject: Fix screenForGeometry on a corner case MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QRect only deals with integers, and I had a window set on the corner and without a size. When this screen was created, it was reported to be on the wrong screen, thus created there wrong. The reason for this is that ::center is not prepared for this use. QRect(QPoint(500,500), QSize()).center() is QRect(499, 499) Change-Id: I24e57182f84873306f180749e96368d6da1147a9 Reviewed-by: Paul Olav Tvete Reviewed-by: Tor Arne Vestbø --- src/gui/kernel/qplatformwindow.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qplatformwindow.cpp b/src/gui/kernel/qplatformwindow.cpp index ea3b75c81c..8757715c0d 100644 --- a/src/gui/kernel/qplatformwindow.cpp +++ b/src/gui/kernel/qplatformwindow.cpp @@ -484,7 +484,9 @@ QPlatformScreen *QPlatformWindow::screenForGeometry(const QRect &newGeometry) co { QPlatformScreen *currentScreen = screen(); QPlatformScreen *fallback = currentScreen; - QPoint center = newGeometry.center(); + //QRect::center can return a value outside the rectangle if it's empty + const QPoint center = newGeometry.isEmpty() ? newGeometry.topLeft() : newGeometry.center(); + if (!parent() && currentScreen && !currentScreen->geometry().contains(center)) { Q_FOREACH (QPlatformScreen* screen, currentScreen->virtualSiblings()) { if (screen->geometry().contains(center)) -- cgit v1.2.3