16#include <KDecoration2/Decoration>
23static const QString s_socketName = QStringLiteral(
"wayland_test_kwin_dont_crash_glxgears-0");
33void DontCrashGlxgearsTest::initTestCase()
35 qRegisterMetaType<KWin::Window *>();
39 QRect(0, 0, 1280, 1024),
40 QRect(1280, 0, 1280, 1024),
43 QVERIFY(applicationStartedSpy.wait());
46void DontCrashGlxgearsTest::testGlxgears()
54 glxgears.setProgram(QStringLiteral(
"glxgears"));
56 QVERIFY(glxgears.waitForStarted());
58 QVERIFY(windowAddedSpy.wait());
59 QCOMPARE(windowAddedSpy.count(), 1);
60 QCOMPARE(
workspace()->windows().count(), 1);
62 QVERIFY(glxgearsWindow->isDecorated());
64 KDecoration2::Decoration *decoration = glxgearsWindow->decoration();
69 QPointF pos = decoration->rect().topRight() + QPointF(-decoration->borderTop() / 2, decoration->borderTop() / 2);
70 QHoverEvent event(QEvent::HoverMove, pos, pos);
71 QCoreApplication::instance()->sendEvent(decoration, &event);
73 QMouseEvent mousePressevent(QEvent::MouseButtonPress, pos, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
74 mousePressevent.setAccepted(
false);
75 QCoreApplication::sendEvent(decoration, &mousePressevent);
76 QVERIFY(mousePressevent.isAccepted());
78 QMouseEvent mouseReleaseEvent(QEvent::MouseButtonRelease, pos, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
79 mouseReleaseEvent.setAccepted(
false);
80 QCoreApplication::sendEvent(decoration, &mouseReleaseEvent);
81 QVERIFY(mouseReleaseEvent.isAccepted());
83 QVERIFY(closedSpy.wait());
84 QCOMPARE(closedSpy.count(), 1);
87 if (glxgears.state() == QProcess::Running) {
88 QVERIFY(glxgears.waitForFinished());
95#include "dont_crash_glxgears.moc"
void windowAdded(KWin::Window *)
const QList< Window * > windows() const
#define WAYLANDTEST_MAIN(TestObject)
void setOutputConfig(const QList< QRect > &geometries)
WaylandServer * waylandServer()
KWIN_EXPORT xcb_connection_t * connection()