summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets/qdockwidget.cpp
diff options
context:
space:
mode:
authorSergio Martins <sergio.martins@kdab.com>2017-02-16 09:58:20 +0000
committerSérgio Martins <sergio.martins@kdab.com>2017-02-22 23:11:01 +0000
commit8c1f147eaf2769f84fa5ae8425394eb315949395 (patch)
tree872aaa84cd059e923c38e956c1a14adec8833847 /src/widgets/widgets/qdockwidget.cpp
parentdd4465f57cb82ad145a78da004545c986215d87c (diff)
dockwidgets: recalculate the press position if the window resizes
A window can resize while dragging, this happens on Windows when dragging across screens, to a screen with a bigger scale factor. When that occurs it might lead to the press pos being outside of the window. Change-Id: Ic61ec7088c8fa81395d43ce665952dbd2eecba39 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src/widgets/widgets/qdockwidget.cpp')
-rw-r--r--src/widgets/widgets/qdockwidget.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp
index 53cb21186f..f51e3c7988 100644
--- a/src/widgets/widgets/qdockwidget.cpp
+++ b/src/widgets/widgets/qdockwidget.cpp
@@ -1024,6 +1024,12 @@ void QDockWidgetPrivate::nonClientAreaMouseEvent(QMouseEvent *event)
}
}
+void QDockWidgetPrivate::recalculatePressPos(QResizeEvent *event)
+{
+ qreal ratio = event->oldSize().width() / (1.0 * event->size().width());
+ state->pressPos.setX(state->pressPos.x() / ratio);
+}
+
/*! \internal
Called when the QDockWidget or the QDockWidgetGroupWindow is moved
*/
@@ -1540,6 +1546,13 @@ bool QDockWidget::event(QEvent *event)
// if the mainwindow is plugging us, we don't want to update undocked geometry
if (isFloating() && layout != 0 && layout->pluggingWidget != this)
d->undockedGeometry = geometry();
+
+ // Usually the window won't get resized while it's being moved, but it can happen,
+ // for example on Windows when moving to a screen with bigger scale factor
+ // (and Qt::AA_EnableHighDpiScaling is enabled). If that happens we should
+ // update state->pressPos, otherwise it will be outside the window when the window shrinks.
+ if (d->state && d->state->dragging)
+ d->recalculatePressPos(static_cast<QResizeEvent*>(event));
break;
default:
break;