summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/auto/client/client/client.pro2
-rw-r--r--tests/auto/client/client/tst_client.cpp37
2 files changed, 23 insertions, 16 deletions
diff --git a/tests/auto/client/client/client.pro b/tests/auto/client/client/client.pro
index 34fc67474..e6e607c3f 100644
--- a/tests/auto/client/client/client.pro
+++ b/tests/auto/client/client/client.pro
@@ -2,7 +2,7 @@ CONFIG += testcase link_pkgconfig
TARGET = tst_client
QT += testlib
-QT += core-private gui-private
+QT += core-private gui-private waylandclient-private
QMAKE_USE += wayland-client wayland-server
diff --git a/tests/auto/client/client/tst_client.cpp b/tests/auto/client/client/tst_client.cpp
index 1eee90f49..3897bd3b1 100644
--- a/tests/auto/client/client/tst_client.cpp
+++ b/tests/auto/client/client/tst_client.cpp
@@ -37,6 +37,8 @@
#include <QDrag>
#include <QtTest/QtTest>
+#include <QtWaylandClient/private/qwaylandintegration_p.h>
+#include <QtGui/private/qguiapplication_p.h>
static const QSize screenSize(1600, 1200);
@@ -96,6 +98,8 @@ public:
++touchEventCount;
}
+ QPoint frameOffset() const { return QPoint(frameMargins().left(), frameMargins().top()); }
+
int focusInEventCount;
int focusOutEventCount;
int keyPressEventCount;
@@ -201,7 +205,7 @@ void tst_WaylandClient::events()
QPoint mousePressPos(16, 16);
QCOMPARE(window.mousePressEventCount, 0);
- compositor->sendMousePress(surface, mousePressPos);
+ compositor->sendMousePress(surface, window.frameOffset() + mousePressPos);
QTRY_COMPARE(window.mousePressEventCount, 1);
QTRY_COMPARE(window.mousePressPos, mousePressPos);
@@ -210,7 +214,7 @@ void tst_WaylandClient::events()
QTRY_COMPARE(window.mouseReleaseEventCount, 1);
const int touchId = 0;
- compositor->sendTouchDown(surface, QPoint(10, 10), touchId);
+ compositor->sendTouchDown(surface, window.frameOffset() + QPoint(10, 10), touchId);
compositor->sendTouchFrame(surface);
QTRY_COMPARE(window.touchEventCount, 1);
@@ -269,6 +273,7 @@ public:
m_dragIcon = QPixmap::fromImage(cursorImage);
}
~DndWindow(){}
+ QPoint frameOffset() const { return QPoint(frameMargins().left(), frameMargins().top()); }
bool dragStarted;
protected:
@@ -302,14 +307,14 @@ void tst_WaylandClient::touchDrag()
QTRY_COMPARE(QGuiApplication::focusWindow(), &window);
const int id = 0;
- compositor->sendTouchDown(surface, QPoint(10, 10), id);
+ compositor->sendTouchDown(surface, window.frameOffset() + QPoint(10, 10), id);
compositor->sendTouchFrame(surface);
- compositor->sendTouchMotion(surface, QPoint(20, 20), id);
+ compositor->sendTouchMotion(surface, window.frameOffset() + QPoint(20, 20), id);
compositor->sendTouchFrame(surface);
compositor->waitForStartDrag();
compositor->sendDataDeviceDataOffer(surface);
- compositor->sendDataDeviceEnter(surface, QPoint(20, 20));
- compositor->sendDataDeviceMotion( QPoint(21, 21));
+ compositor->sendDataDeviceEnter(surface, window.frameOffset() + QPoint(20, 20));
+ compositor->sendDataDeviceMotion(window.frameOffset() + QPoint(21, 21));
compositor->sendDataDeviceDrop(surface);
compositor->sendDataDeviceLeave(surface);
QTRY_VERIFY(window.dragStarted);
@@ -326,10 +331,10 @@ void tst_WaylandClient::mouseDrag()
compositor->setKeyboardFocus(surface);
QTRY_COMPARE(QGuiApplication::focusWindow(), &window);
- compositor->sendMousePress(surface, QPoint(10, 10));
+ compositor->sendMousePress(surface, window.frameOffset() + QPoint(10, 10));
compositor->sendDataDeviceDataOffer(surface);
- compositor->sendDataDeviceEnter(surface, QPoint(20, 20));
- compositor->sendDataDeviceMotion( QPoint(21, 21));
+ compositor->sendDataDeviceEnter(surface, window.frameOffset() + QPoint(20, 20));
+ compositor->sendDataDeviceMotion(window.frameOffset() + QPoint(21, 21));
compositor->waitForStartDrag();
compositor->sendDataDeviceDrop(surface);
compositor->sendDataDeviceLeave(surface);
@@ -390,7 +395,7 @@ void tst_WaylandClient::hiddenPopupParent()
QTRY_VERIFY(surface = compositor->surface());
QPoint mousePressPos(16, 16);
QCOMPARE(toplevel.mousePressEventCount, 0);
- compositor->sendMousePress(surface, mousePressPos);
+ compositor->sendMousePress(surface, toplevel.frameOffset() + mousePressPos);
QTRY_COMPARE(toplevel.mousePressEventCount, 1);
QWindow popup;
@@ -409,15 +414,17 @@ int main(int argc, char **argv)
setenv("XDG_RUNTIME_DIR", ".", 1);
setenv("QT_QPA_PLATFORM", "wayland", 1); // force QGuiApplication to use wayland plugin
- // wayland-egl hangs in the test setup when we try to initialize. Until it gets
- // figured out, avoid clientBufferIntegration() from being called in
- // QWaylandWindow::createDecorations().
- setenv("QT_WAYLAND_DISABLE_WINDOWDECORATION", "1", 1);
-
MockCompositor compositor;
compositor.setOutputGeometry(QRect(QPoint(), screenSize));
QGuiApplication app(argc, argv);
+
+ // Initializing some client buffer integrations (i.e. eglInitialize) may block while waiting
+ // for a wayland sync. So we call clientBufferIntegration prior to applicationInitialized
+ // (while the compositor processes events without waiting) in order to avoid hanging later.
+ auto *waylandIntegration = static_cast<QtWaylandClient::QWaylandIntegration *>(QGuiApplicationPrivate::platformIntegration());
+ waylandIntegration->clientBufferIntegration();
+
compositor.applicationInitialized();
tst_WaylandClient tc(&compositor);