summaryrefslogtreecommitdiff
path: root/tests/auto
diff options
context:
space:
mode:
authorDavid Edmundson <davidedmundson@kde.org>2020-04-07 17:36:19 +0100
committerDavid Edmundson <davidedmundson@kde.org>2020-08-26 16:07:08 +0100
commit8f27bf64fe0a944bccd7bb5a920abc12a112762f (patch)
tree4aaa621f2462a806d64828582920f14e5f3b5bc7 /tests/auto
parent5ecf5215737ba3343a10310c0dff08763af737bc (diff)
downloadqtwayland-8f27bf64fe0a944bccd7bb5a920abc12a112762f.tar.gz
Client: Fix scroll direction with touchpads
Wayland axis events and QWheelEvents are opposite way rounds. This was handled for the case of discrete events, but not continuous events. This leads to touchpads moving the wrong way round compared to other clients. Change-Id: Iee4f5c620940a491949d4039cb3ac70649d83a2b Pick-to: 5.15 Task-number: QTBUG-85767 Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/client/seatv5/tst_seatv5.cpp35
1 files changed, 31 insertions, 4 deletions
diff --git a/tests/auto/client/seatv5/tst_seatv5.cpp b/tests/auto/client/seatv5/tst_seatv5.cpp
index 701c5ede..0c4dcfe0 100644
--- a/tests/auto/client/seatv5/tst_seatv5.cpp
+++ b/tests/auto/client/seatv5/tst_seatv5.cpp
@@ -63,6 +63,7 @@ private slots:
void simpleAxis();
void fingerScroll();
void fingerScrollSlow();
+ void continuousScroll();
void wheelDiscreteScroll();
// Touch tests
@@ -252,7 +253,7 @@ void tst_seatv5::fingerScroll()
QCOMPARE(e.phase, Qt::ScrollUpdate);
QVERIFY(qAbs(e.angleDelta.x()) <= qAbs(e.angleDelta.y())); // Vertical scroll
// QCOMPARE(e.angleDelta, angleDelta); // TODO: what should this be?
- QCOMPARE(e.pixelDelta, QPoint(0, 10));
+ QCOMPARE(e.pixelDelta, QPoint(0, -10));
QCOMPARE(e.source, Qt::MouseEventSynthesizedBySystem); // A finger is not a wheel
}
@@ -269,7 +270,7 @@ void tst_seatv5::fingerScroll()
auto e = window.m_events.takeFirst();
QCOMPARE(e.phase, Qt::ScrollUpdate);
QVERIFY(qAbs(e.angleDelta.x()) > qAbs(e.angleDelta.y())); // Horizontal scroll
- QCOMPARE(e.pixelDelta, QPoint(10, 0));
+ QCOMPARE(e.pixelDelta, QPoint(-10, 0));
QCOMPARE(e.source, Qt::MouseEventSynthesizedBySystem); // A finger is not a wheel
}
@@ -284,7 +285,7 @@ void tst_seatv5::fingerScroll()
{
auto e = window.m_events.takeFirst();
QCOMPARE(e.phase, Qt::ScrollUpdate);
- QCOMPARE(e.pixelDelta, QPoint(10, 10));
+ QCOMPARE(e.pixelDelta, QPoint(-10, -10));
QCOMPARE(e.source, Qt::MouseEventSynthesizedBySystem); // A finger is not a wheel
}
@@ -338,7 +339,7 @@ void tst_seatv5::fingerScrollSlow()
accumulated += e.pixelDelta;
QTRY_VERIFY(!window.m_events.empty());
}
- QCOMPARE(accumulated.y(), 1);
+ QCOMPARE(accumulated.y(), -1);
}
void tst_seatv5::wheelDiscreteScroll()
{
@@ -370,6 +371,32 @@ void tst_seatv5::wheelDiscreteScroll()
}
}
+void tst_seatv5::continuousScroll()
+{
+ WheelWindow window;
+ QCOMPOSITOR_TRY_VERIFY(xdgSurface() && xdgSurface()->m_committedConfigureSerial);
+
+ exec([=] {
+ auto *p = pointer();
+ auto *c = client();
+ p->sendEnter(xdgToplevel()->surface(), {32, 32});
+ p->sendFrame(c);
+ p->sendAxisSource(c, Pointer::axis_source_continuous);
+ p->sendAxis(c, Pointer::axis_vertical_scroll, 10);
+ p->sendAxis(c, Pointer::axis_horizontal_scroll, -5);
+ p->sendFrame(c);
+ });
+
+ QTRY_VERIFY(!window.m_events.empty());
+ {
+ auto e = window.m_events.takeFirst();
+ QCOMPARE(e.phase, Qt::NoScrollPhase);
+ QCOMPARE(e.pixelDelta, QPoint(5, -10));
+ QCOMPARE(e.source, Qt::MouseEventSynthesizedBySystem); // touchpads are not wheels
+ }
+ // Sending axis_stop is not mandatory when axis source != finger
+}
+
void tst_seatv5::createsTouch()
{
QCOMPOSITOR_TRY_COMPARE(touch()->resourceMap().size(), 1);