18#include "KWayland/Client/compositor.h"
19#include "KWayland/Client/connection_thread.h"
20#include "KWayland/Client/event_queue.h"
21#include "KWayland/Client/registry.h"
22#include "KWayland/Client/seat.h"
23#include "KWayland/Client/surface.h"
25#include "qwayland-keyboard-shortcuts-inhibit-unstable-v1.h"
34 :
QtWayland::zwp_keyboard_shortcuts_inhibit_manager_v1(registry, id,
version)
44 :
QtWayland::zwp_keyboard_shortcuts_inhibitor_v1(inhibitorV1)
74 void testKeyboardShortcuts();
77 KWayland::Client::ConnectionThread *m_connection;
78 KWayland::Client::EventQueue *m_queue;
79 KWayland::Client::Compositor *m_clientCompositor;
80 KWayland::Client::Seat *m_clientSeat =
nullptr;
88 QList<SurfaceInterface *> m_surfaces;
89 QList<wl_surface *> m_clientSurfaces;
93static const QString s_socketName = QStringLiteral(
"kwin-wayland-server-keyboard-shortcuts-inhibitor-test-0");
95void TestKeyboardShortcutsInhibitorInterface::initTestCase()
106 m_surfaces += surface;
110 m_connection =
new KWayland::Client::ConnectionThread;
111 QSignalSpy connectedSpy(m_connection, &KWayland::Client::ConnectionThread::connected);
112 m_connection->setSocketName(s_socketName);
114 m_thread =
new QThread(
this);
115 m_connection->moveToThread(m_thread);
118 m_connection->initConnection();
119 QVERIFY(connectedSpy.wait());
120 QVERIFY(!m_connection->connections().isEmpty());
122 m_queue =
new KWayland::Client::EventQueue(
this);
123 QVERIFY(!m_queue->isValid());
124 m_queue->setup(m_connection);
125 QVERIFY(m_queue->isValid());
127 auto registry =
new KWayland::Client::Registry(
this);
128 connect(registry, &KWayland::Client::Registry::interfaceAnnounced,
this, [
this, registry](
const QByteArray &interface, quint32
id, quint32
version) {
129 if (interface ==
"zwp_keyboard_shortcuts_inhibit_manager_v1") {
133 connect(registry, &KWayland::Client::Registry::seatAnnounced,
this, [
this, registry](quint32 name, quint32
version) {
137 QSignalSpy compositorSpy(registry, &KWayland::Client::Registry::compositorAnnounced);
138 registry->create(m_connection->display());
141 wl_display_flush(m_connection->display());
143 QVERIFY(compositorSpy.wait());
144 m_clientCompositor =
registry->createCompositor(compositorSpy.first().first().value<quint32>(), compositorSpy.first().last().value<quint32>(),
this);
145 QVERIFY(m_clientCompositor->isValid());
148 for (
int i = 0; i < 3; ++i) {
149 KWayland::Client::Surface *s = m_clientCompositor->createSurface(
this);
150 m_clientSurfaces += s->operator wl_surface *();
152 QVERIFY(surfaceSpy.count() < 3 && surfaceSpy.wait(200));
153 QVERIFY(m_surfaces.count() == 3);
154 QVERIFY(m_inhibitManagerClient);
169 m_connection->deleteLater();
170 m_connection =
nullptr;
173void TestKeyboardShortcutsInhibitorInterface::testKeyboardShortcuts()
175 auto clientSurface = m_clientSurfaces[0];
176 auto surface = m_surfaces[0];
179 auto inhibitorClientV1 = m_inhibitManagerClient->inhibit_shortcuts(clientSurface, m_clientSeat->operator wl_seat *());
184 QVERIFY(inhibitorCreatedSpy.wait() || inhibitorCreatedSpy.count() == 1);
185 auto inhibitorServer = m_manager->
findInhibitor(surface, m_seat);
189 QVERIFY(inhibitorInactiveSpy.wait() || inhibitorInactiveSpy.count() == 1);
192 inhibitorServer->setActive(
true);
193 QVERIFY(inhibitorActiveSpy.wait() || inhibitorActiveSpy.count() == 1);
196 m_inhibitManagerClient->inhibit_shortcuts(m_clientSurfaces[1], m_clientSeat->operator wl_seat *());
197 QVERIFY(inhibitorCreatedSpy.wait() || inhibitorCreatedSpy.count() == 2);
200 inhibitorClient->destroy();
201 m_inhibitManagerClient->inhibit_shortcuts(clientSurface, m_clientSeat->operator wl_seat *());
202 QVERIFY(inhibitorCreatedSpy.wait() || inhibitorCreatedSpy.count() == 3);
205 QSignalSpy errorOccured(m_connection, &KWayland::Client::ConnectionThread::errorOccurred);
206 m_inhibitManagerClient->inhibit_shortcuts(m_clientSurfaces[0], m_clientSeat->operator wl_seat *());
207 QVERIFY(errorOccured.wait() || errorOccured.count() == 1);
212#include "test_keyboard_shortcuts_inhibitor_interface.moc"
void surfaceCreated(KWin::SurfaceInterface *surface)
Class holding the Wayland server display loop.
bool addSocketName(const QString &name=QString())
KeyboardShortcutsInhibitorV1Interface * findInhibitor(SurfaceInterface *surface, SeatInterface *seat) const
void inhibitorCreated(KeyboardShortcutsInhibitorV1Interface *inhibitor)
void setActive(bool active)
Represents a Seat on the Wayland Display.
Resource representing a wl_surface.
KeyboardShortcutsInhibitManager(wl_registry *registry, quint32 id, quint32 version)
void zwp_keyboard_shortcuts_inhibitor_v1_active() override
void zwp_keyboard_shortcuts_inhibitor_v1_inactive() override
KeyboardShortcutsInhibitor(::zwp_keyboard_shortcuts_inhibitor_v1 *inhibitorV1)
~TestKeyboardShortcutsInhibitorInterface() override
TestKeyboardShortcutsInhibitorInterface()
KWayland::Client::Registry * registry