diff options
author | Liang Qi <liang.qi@qt.io> | 2016-06-23 07:18:39 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-06-23 10:29:37 +0200 |
commit | 5cfb80a28ef6bf6820c970a6c355e6879021e46e (patch) | |
tree | e60f1f43e9670e82923e3c2d0d19b29198b9c300 /src/widgets | |
parent | 930e750b7aca024b839c9856cfcc79aab8c0abbc (diff) | |
parent | f4be16e1f7828a0f6992ef2e20b9106177d7fc88 (diff) |
Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts:
src/angle/src/libGLESv2/libGLESv2.pro
src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp
Change-Id: If8da4cfe8f57fea9f78e7239f378a6302c01674e
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/kernel/qdesktopwidget.cpp | 20 | ||||
-rw-r--r-- | src/widgets/widgets/qdockwidget.cpp | 2 |
2 files changed, 12 insertions, 10 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; diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index 293a04ef88..19444f8315 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -1451,8 +1451,6 @@ bool QDockWidget::event(QEvent *event) switch (event->type()) { #ifndef QT_NO_ACTION case QEvent::Hide: - if (d->state && d->state->dragging) - d->endDrag(true); if (layout != 0) layout->keepSize(this); d->toggleViewAction->setChecked(false); |