summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-10-02 03:01:32 +0200
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2018-10-02 03:01:32 +0200
commit9c5d1b634ea82fdc1b09713da4565b905d2c9123 (patch)
treee6ec5749163a5b4691d0304a9f287110f7353718 /tests
parent0fbc2f68c87e0057ed7df3ad500c7dfe5c61d9d8 (diff)
parenta1ca3ae56f33bff34db71d1dec6104d0d6614e6d (diff)
Merge remote-tracking branch 'origin/5.12' into dev
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/compositor/compositor/tst_compositor.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/auto/compositor/compositor/tst_compositor.cpp b/tests/auto/compositor/compositor/tst_compositor.cpp
index e3c4daccc..c7661e8db 100644
--- a/tests/auto/compositor/compositor/tst_compositor.cpp
+++ b/tests/auto/compositor/compositor/tst_compositor.cpp
@@ -67,6 +67,7 @@ private slots:
void seatCreation();
void seatKeyboardFocus();
void seatMouseFocus();
+ void inputRegion();
void singleClient();
void multipleClients();
void geometry();
@@ -650,6 +651,61 @@ void tst_WaylandCompositor::seatMouseFocus()
delete view;
}
+void tst_WaylandCompositor::inputRegion()
+{
+ TestCompositor compositor(true);
+ compositor.create();
+
+ // Create client after all the seats have been set up as the mock client
+ // does not dynamically listen to new seats
+ MockClient client;
+ wl_surface *surface = client.createSurface();
+
+ // We need to attach a buffer, since QWaylandSurface::inputRegionContains will will return
+ // false for coordinates outside the buffer (so don't let it be 0x0).
+ QSize size(16, 16);
+ ShmBuffer buffer(size, client.shm);
+ wl_surface_attach(surface, buffer.handle, 0, 0);
+ wl_surface_damage(surface, 0, 0, size.width(), size.height());
+
+ // Set the input region
+ wl_region *region = wl_compositor_create_region(client.compositor);
+ wl_region_add(region, 1, 2, 3, 4);
+ wl_surface_set_input_region(surface, region);
+
+ // Commit everything
+ wl_surface_commit(surface);
+
+ QTRY_COMPARE(compositor.surfaces.size(), 1);
+ QWaylandSurface *waylandSurface = compositor.surfaces.at(0);
+
+ QVERIFY(waylandSurface->inputRegionContains(QPoint(1, 2)));
+ QVERIFY(waylandSurface->inputRegionContains(QPoint(3, 5)));
+ QVERIFY(!waylandSurface->inputRegionContains(QPoint(0, 0)));
+ QVERIFY(!waylandSurface->inputRegionContains(QPoint(1, 6)));
+ QVERIFY(!waylandSurface->inputRegionContains(QPoint(4, 2)));
+
+ // Setting a nullptr input region means we want all events
+ wl_surface_set_input_region(surface, nullptr);
+ wl_surface_commit(surface);
+
+ QTRY_VERIFY(waylandSurface->inputRegionContains(QPoint(0, 0)));
+ QVERIFY(waylandSurface->inputRegionContains(QPoint(1, 6)));
+ QVERIFY(waylandSurface->inputRegionContains(QPoint(4, 2)));
+
+ // But points outside the buffer should still return false
+ QVERIFY(!waylandSurface->inputRegionContains(QPoint(-1, -1)));
+ QVERIFY(!waylandSurface->inputRegionContains(QPoint(16, 16)));
+
+ // Setting an empty region means we want no events
+ wl_region *emptyRegion = wl_compositor_create_region(client.compositor);
+ wl_surface_set_input_region(surface, emptyRegion);
+ wl_surface_commit(surface);
+
+ QTRY_VERIFY(!waylandSurface->inputRegionContains(QPoint(0, 0)));
+ QVERIFY(!waylandSurface->inputRegionContains(QPoint(1, 2)));
+}
+
class XdgTestCompositor: public TestCompositor {
Q_OBJECT
public: