summaryrefslogtreecommitdiffstats
path: root/src/widgets/kernel
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-06-23 13:23:57 +0200
committerLiang Qi <liang.qi@qt.io>2016-06-23 14:24:55 +0200
commitdd90af122154af8ba8cba16c8760c3d2a1d0fcab (patch)
tree08dc64d9960346c4b27f42c7e58ef9d8885ac760 /src/widgets/kernel
parentb24396b925c78a59ef4a59d69a6b2633887aaf2f (diff)
parent5cfb80a28ef6bf6820c970a6c355e6879021e46e (diff)
Merge remote-tracking branch 'origin/5.7' into dev
Conflicts: mkspecs/common/mac.conf mkspecs/features/configure_base.prf mkspecs/features/configure.prf mkspecs/macx-clang-32/qmake.conf mkspecs/macx-clang/qmake.conf mkspecs/macx-ios-clang/qmake.conf src/network/ssl/qsslsocket_openssl_symbols_p.h Change-Id: I768b592e8e589662b1fdb9b8cbd633fef26845b6
Diffstat (limited to 'src/widgets/kernel')
-rw-r--r--src/widgets/kernel/qdesktopwidget.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/widgets/kernel/qdesktopwidget.cpp b/src/widgets/kernel/qdesktopwidget.cpp
index ece673337a..eee818b685 100644
--- a/src/widgets/kernel/qdesktopwidget.cpp
+++ b/src/widgets/kernel/qdesktopwidget.cpp
@@ -44,6 +44,9 @@
#include "qwidget_p.h"
#include "qwindow.h"
+#include <private/qhighdpiscaling_p.h>
+#include <qpa/qplatformscreen.h>
+
QT_BEGIN_NAMESPACE
QDesktopScreenWidget::QDesktopScreenWidget(QScreen *screen, const QRect &geometry)
@@ -245,18 +248,18 @@ int QDesktopWidget::screenNumber(const QWidget *w) const
if (screens.isEmpty()) // This should never happen
return primaryScreen();
+ const QWindow *winHandle = w->windowHandle();
+ if (!winHandle) {
+ if (const QWidget *nativeParent = w->nativeParentWidget())
+ winHandle = nativeParent->windowHandle();
+ }
+
// If there is more than one virtual desktop
if (screens.count() != screens.constFirst()->virtualSiblings().count()) {
// Find the root widget, get a QScreen from it and use the
// virtual siblings for checking the window position.
- const QWidget *root = w;
- const QWidget *tmp = w;
- while ((tmp = tmp->parentWidget()))
- root = tmp;
- const QWindow *winHandle = root->windowHandle();
if (winHandle) {
- const QScreen *winScreen = winHandle->screen();
- if (winScreen)
+ if (const QScreen *winScreen = winHandle->screen())
screens = winScreen->virtualSiblings();
}
}
@@ -266,11 +269,12 @@ int QDesktopWidget::screenNumber(const QWidget *w) const
QRect frame = w->frameGeometry();
if (!w->isWindow())
frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0)));
+ const QRect nativeFrame = QHighDpi::toNativePixels(frame, winHandle);
QScreen *widgetScreen = Q_NULLPTR;
int largestArea = 0;
foreach (QScreen *screen, screens) {
- QRect intersected = screen->geometry().intersected(frame);
+ const QRect intersected = screen->handle()->geometry().intersected(nativeFrame);
int area = intersected.width() * intersected.height();
if (largestArea < area) {
widgetScreen = screen;