diff --git a/autotests/integration/touch_input_test.cpp b/autotests/integration/touch_input_test.cpp index b3acf0431..c63643c13 100644 --- a/autotests/integration/touch_input_test.cpp +++ b/autotests/integration/touch_input_test.cpp @@ -29,6 +29,7 @@ along with this program. If not, see . #include #include #include +#include #include #include @@ -44,12 +45,13 @@ private Q_SLOTS: void initTestCase(); void init(); void cleanup(); + void testMultipleTouchPoints_data(); void testMultipleTouchPoints(); void testCancel(); void testTouchMouseAction(); private: - AbstractClient *showWindow(); + AbstractClient *showWindow(bool decorated = false); KWayland::Client::Touch *m_touch = nullptr; }; @@ -74,7 +76,7 @@ void TouchInputTest::initTestCase() void TouchInputTest::init() { using namespace KWayland::Client; - QVERIFY(Test::setupWaylandConnection(Test::AdditionalWaylandInterface::Seat)); + QVERIFY(Test::setupWaylandConnection(Test::AdditionalWaylandInterface::Seat | Test::AdditionalWaylandInterface::Decoration)); QVERIFY(Test::waitForWaylandTouch()); m_touch = Test::waylandSeat()->createTouch(Test::waylandSeat()); QVERIFY(m_touch); @@ -91,7 +93,7 @@ void TouchInputTest::cleanup() Test::destroyWaylandConnection(); } -AbstractClient *TouchInputTest::showWindow() +AbstractClient *TouchInputTest::showWindow(bool decorated) { using namespace KWayland::Client; #define VERIFY(statement) \ @@ -105,6 +107,15 @@ AbstractClient *TouchInputTest::showWindow() VERIFY(surface); ShellSurface *shellSurface = Test::createShellSurface(surface, surface); VERIFY(shellSurface); + if (decorated) { + auto deco = Test::waylandServerSideDecoration()->create(surface, surface); + QSignalSpy decoSpy(deco, &ServerSideDecoration::modeChanged); + VERIFY(decoSpy.isValid()); + VERIFY(decoSpy.wait()); + deco->requestMode(ServerSideDecoration::Mode::Server); + VERIFY(decoSpy.wait()); + COMPARE(deco->mode(), ServerSideDecoration::Mode::Server); + } // let's render auto c = Test::renderAndWaitForShown(surface, QSize(100, 50), Qt::blue); @@ -117,10 +128,20 @@ AbstractClient *TouchInputTest::showWindow() return c; } +void TouchInputTest::testMultipleTouchPoints_data() +{ + QTest::addColumn("decorated"); + + QTest::newRow("undecorated") << false; + QTest::newRow("decorated") << true; +} + void TouchInputTest::testMultipleTouchPoints() { using namespace KWayland::Client; - AbstractClient *c = showWindow(); + QFETCH(bool, decorated); + AbstractClient *c = showWindow(decorated); + QCOMPARE(c->isDecorated(), decorated); c->move(100, 100); QVERIFY(c); QSignalSpy sequenceStartedSpy(m_touch, &Touch::sequenceStarted); @@ -135,30 +156,33 @@ void TouchInputTest::testMultipleTouchPoints() QVERIFY(endedSpy.isValid()); quint32 timestamp = 1; - kwinApp()->platform()->touchDown(1, QPointF(125, 125), timestamp++); + kwinApp()->platform()->touchDown(1, QPointF(125, 125) + c->clientPos(), timestamp++); QVERIFY(sequenceStartedSpy.wait()); QCOMPARE(sequenceStartedSpy.count(), 1); QCOMPARE(m_touch->sequence().count(), 1); QCOMPARE(m_touch->sequence().first()->isDown(), true); + QEXPECT_FAIL("decorated", "BUG 374778", Continue); QCOMPARE(m_touch->sequence().first()->position(), QPointF(25, 25)); QCOMPARE(pointAddedSpy.count(), 0); QCOMPARE(pointMovedSpy.count(), 0); // a point outside the window - kwinApp()->platform()->touchDown(2, QPointF(0, 0), timestamp++); + kwinApp()->platform()->touchDown(2, QPointF(0, 0) + c->clientPos(), timestamp++); QVERIFY(pointAddedSpy.wait()); QCOMPARE(pointAddedSpy.count(), 1); QCOMPARE(m_touch->sequence().count(), 2); QCOMPARE(m_touch->sequence().at(1)->isDown(), true); + QEXPECT_FAIL("decorated", "BUG 374778", Continue); QCOMPARE(m_touch->sequence().at(1)->position(), QPointF(-100, -100)); QCOMPARE(pointMovedSpy.count(), 0); // let's move that one - kwinApp()->platform()->touchMotion(2, QPointF(100, 100), timestamp++); + kwinApp()->platform()->touchMotion(2, QPointF(100, 100) + c->clientPos(), timestamp++); QVERIFY(pointMovedSpy.wait()); QCOMPARE(pointMovedSpy.count(), 1); QCOMPARE(m_touch->sequence().count(), 2); QCOMPARE(m_touch->sequence().at(1)->isDown(), true); + QEXPECT_FAIL("decorated", "BUG 374778", Continue); QCOMPARE(m_touch->sequence().at(1)->position(), QPointF(0, 0)); kwinApp()->platform()->touchUp(1, timestamp++);