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>bb10
parent
dd4465f57c
commit
8c1f147eaf
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -118,6 +118,7 @@ public:
|
|||
void startDrag(bool group = true);
|
||||
void endDrag(bool abort = false);
|
||||
void moveEvent(QMoveEvent *event);
|
||||
void recalculatePressPos(QResizeEvent *event);
|
||||
|
||||
void unplug(const QRect &rect);
|
||||
void plug(const QRect &rect);
|
||||
|
|
|
|||
Loading…
Reference in New Issue