19#include <KWayland/Client/keyboard.h>
20#include <KWayland/Client/seat.h>
22#include <linux/input.h>
27static const QString s_socketName = QStringLiteral(
"wayland_test_kwin_sticky_keys-0");
40void StickyKeysTest::initTestCase()
42 KConfig kaccessConfig(
"kaccessrc");
43 kaccessConfig.group(QStringLiteral(
"Keyboard")).writeEntry(
"StickyKeys",
true);
46 qRegisterMetaType<KWin::Window *>();
50 QRect(0, 0, 1280, 1024),
51 QRect(1280, 0, 1280, 1024),
54 qputenv(
"XKB_DEFAULT_RULES",
"evdev");
57 QVERIFY(applicationStartedSpy.wait());
60void StickyKeysTest::init()
66void StickyKeysTest::cleanup()
71void StickyKeysTest::testStick()
73 std::unique_ptr<KWayland::Client::Keyboard> keyboard(
Test::waylandSeat()->createKeyboard());
76 QVERIFY(surface !=
nullptr);
78 QVERIFY(shellSurface !=
nullptr);
80 QVERIFY(waylandWindow);
82 QSignalSpy modifierSpy(keyboard.get(), &KWayland::Client::Keyboard::modifiersChanged);
83 QVERIFY(modifierSpy.wait());
86 quint32 timestamp = 0;
90 QVERIFY(modifierSpy.wait());
92 QCOMPARE(modifierSpy.first()[0], 4);
93 QCOMPARE(modifierSpy.first()[1], 4);
98 QVERIFY(modifierSpy.wait());
99 QCOMPARE(modifierSpy.first()[0], 0);
100 QCOMPARE(modifierSpy.first()[1], 4);
105 QVERIFY(modifierSpy.wait());
106 QCOMPARE(modifierSpy.first()[0], 0);
107 QCOMPARE(modifierSpy.first()[1], 0);
112void StickyKeysTest::testLock()
114 KConfig kaccessConfig(
"kaccessrc");
115 kaccessConfig.group(QStringLiteral(
"Keyboard")).writeEntry(
"StickyKeysLatch",
true);
116 kaccessConfig.sync();
119 kwinApp()->pluginManager()->unloadPlugin(
"StickyKeysPlugin");
120 kwinApp()->pluginManager()->loadPlugin(
"StickyKeysPlugin");
123 std::unique_ptr<KWayland::Client::Keyboard> keyboard(
Test::waylandSeat()->createKeyboard());
126 QVERIFY(surface !=
nullptr);
128 QVERIFY(shellSurface !=
nullptr);
130 QVERIFY(waylandWindow);
131 waylandWindow->move(QPoint(0, 0));
133 QSignalSpy modifierSpy(keyboard.get(), &KWayland::Client::Keyboard::modifiersChanged);
134 QVERIFY(modifierSpy.wait());
137 quint32 timestamp = 0;
141 QVERIFY(modifierSpy.wait());
143 QCOMPARE(modifierSpy.first()[0], 4);
144 QCOMPARE(modifierSpy.first()[1], 4);
149 QVERIFY(modifierSpy.wait());
150 QCOMPARE(modifierSpy.first()[0], 0);
151 QCOMPARE(modifierSpy.first()[1], 4);
156 QVERIFY(modifierSpy.wait());
157 QCOMPARE(modifierSpy.first()[0], 4);
159 QCOMPARE(modifierSpy.first()[2], 4);
164 QVERIFY(!modifierSpy.wait(10));
167 QVERIFY(!modifierSpy.wait(10));
171 QVERIFY(modifierSpy.wait());
172 QCOMPARE(modifierSpy.first()[0], 4);
173 QCOMPARE(modifierSpy.first()[2], 0);
180#include "sticky_keys_test.moc"
#define WAYLANDTEST_MAIN(TestObject)
Window * renderAndWaitForShown(KWayland::Client::Surface *surface, const QSize &size, const QColor &color, const QImage::Format &format=QImage::Format_ARGB32, int timeout=5000)
void keyboardKeyReleased(quint32 key, quint32 time)
void destroyWaylandConnection()
void setOutputConfig(const QList< QRect > &geometries)
void keyboardKeyPressed(quint32 key, quint32 time)
bool waitForWaylandKeyboard()
bool setupWaylandConnection(AdditionalWaylandInterfaces flags=AdditionalWaylandInterfaces())
KWayland::Client::Seat * waylandSeat()
std::unique_ptr< KWayland::Client::Surface > createSurface()
XdgToplevel * createXdgToplevelSurface(KWayland::Client::Surface *surface, QObject *parent=nullptr)
WaylandServer * waylandServer()