summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-06-23 07:18:39 +0200
committerLiang Qi <liang.qi@qt.io>2016-06-23 10:29:37 +0200
commit5cfb80a28ef6bf6820c970a6c355e6879021e46e (patch)
treee60f1f43e9670e82923e3c2d0d19b29198b9c300 /src/widgets
parent930e750b7aca024b839c9856cfcc79aab8c0abbc (diff)
parentf4be16e1f7828a0f6992ef2e20b9106177d7fc88 (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.cpp20
-rw-r--r--src/widgets/widgets/qdockwidget.cpp2
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);