mirror of https://github.com/qt/qtbase.git
Make QCursor::setPos() use the correct screen
setPos() takes a screen argument, however this argument indicates which cursor should be moved only and is not usable as an argument to toNativePixels() since the position may be on a sibling screen. Add call to QScreen::virtualSiblingAt to get the target screen. Task-number: QTBUG-99009 Pick-to: 6.3 6.2 5.15 Change-Id: I8714ebc93a283c58bc67911315f787c484fb0dd8 Reviewed-by: Liang Qi <liang.qi@qt.io> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
parent
38a66aa53a
commit
eef865cdc5
|
@ -251,7 +251,8 @@ void QCursor::setPos(QScreen *screen, int x, int y)
|
|||
{
|
||||
if (screen) {
|
||||
if (QPlatformCursor *cursor = screen->handle()->cursor()) {
|
||||
const QPoint devicePos = QHighDpi::toNativePixels(QPoint(x, y), screen);
|
||||
const QPoint pos(x, y);
|
||||
const QPoint devicePos = QHighDpi::toNativePixels(pos, screen->virtualSiblingAt(pos));
|
||||
// Need to check, since some X servers generate null mouse move
|
||||
// events, causing looping in applications which call setPos() on
|
||||
// every mouse move event.
|
||||
|
|
|
@ -76,6 +76,8 @@ private slots:
|
|||
void mouseEvents();
|
||||
void mouseVelocity();
|
||||
void mouseVelocity_data();
|
||||
void setCursor();
|
||||
void setCursor_data();
|
||||
};
|
||||
|
||||
/// Offscreen platform plugin test setup
|
||||
|
@ -805,5 +807,22 @@ void tst_QHighDpi::mouseVelocity()
|
|||
}
|
||||
}
|
||||
|
||||
void tst_QHighDpi::setCursor_data()
|
||||
{
|
||||
standardScreenDpiTestData();
|
||||
}
|
||||
|
||||
void tst_QHighDpi::setCursor()
|
||||
{
|
||||
QFETCH(QList<qreal>, dpiValues);
|
||||
std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(dpiValues));
|
||||
|
||||
for (QScreen *screen : app->screens()) {
|
||||
QPoint center = screen->geometry().center();
|
||||
QCursor::setPos(center.x(), center.y());
|
||||
QCOMPARE(QCursor::pos(), center);
|
||||
}
|
||||
}
|
||||
|
||||
#include "tst_qhighdpi.moc"
|
||||
QTEST_APPLESS_MAIN(tst_QHighDpi);
|
||||
|
|
Loading…
Reference in New Issue