19#include <QDBusConnection>
20#include <QDBusMessage>
21#include <QDBusPendingCall>
24#include <xcb/xcb_icccm.h>
29static const QString s_socketName = QStringLiteral(
"wayland_test_kwin_activities-0");
36 void cleanupTestCase();
39 void testSetOnActivitiesValidates();
44void ActivitiesTest::initTestCase()
46 qRegisterMetaType<KWin::Window *>();
50 QRect(0, 0, 1280, 1024),
51 QRect(1280, 0, 1280, 1024),
54 kwinApp()->setUseKActivities(
true);
56 QVERIFY(applicationStartedSpy.wait());
58 QCOMPARE(outputs.count(), 2);
59 QCOMPARE(outputs[0]->geometry(), QRect(0, 0, 1280, 1024));
60 QCOMPARE(outputs[1]->geometry(), QRect(1280, 0, 1280, 1024));
61 setenv(
"QT_QPA_PLATFORM",
"wayland",
true);
64void ActivitiesTest::cleanupTestCase()
67 QDBusConnection::sessionBus().asyncCall(QDBusMessage::createMethodCall(
68 QStringLiteral(
"org.kde.ActivityManager"),
69 QStringLiteral(
"/ActivityManager"),
70 QStringLiteral(
"org.qtproject.Qt.QCoreApplication"),
71 QStringLiteral(
"quit")));
74void ActivitiesTest::init()
80void ActivitiesTest::cleanup()
84void ActivitiesTest::testSetOnActivitiesValidates()
89 QVERIFY(!xcb_connection_has_error(c.get()));
91 xcb_window_t windowId = xcb_generate_id(c.get());
92 const QRect windowGeometry(0, 0, 100, 200);
94 auto cookie = xcb_create_window_checked(c.get(), 0, windowId,
rootWindow(),
97 windowGeometry.width(),
98 windowGeometry.height(),
99 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, 0, 0,
nullptr);
100 QVERIFY(!xcb_request_check(c.get(), cookie));
101 xcb_size_hints_t hints;
102 memset(&hints, 0,
sizeof(hints));
103 xcb_icccm_size_hints_set_position(&hints, 1, windowGeometry.x(), windowGeometry.y());
104 xcb_icccm_size_hints_set_size(&hints, 1, windowGeometry.width(), windowGeometry.height());
105 xcb_icccm_set_wm_normal_hints(c.get(), windowId, &hints);
106 xcb_map_window(c.get(), windowId);
111 QVERIFY(windowCreatedSpy.wait());
112 X11Window *window = windowCreatedSpy.first().first().value<X11Window *>();
114 QCOMPARE(window->window(), windowId);
115 QVERIFY(window->isDecorated());
118 QVERIFY(!
Workspace::self()->activities()->all().contains(QStringLiteral(
"foo")));
119 QVERIFY(!
Workspace::self()->activities()->all().contains(QStringLiteral(
"bar")));
121 window->setOnActivities(QStringList{QStringLiteral(
"foo"), QStringLiteral(
"bar")});
122 QVERIFY(!window->activities().contains(QLatin1String(
"foo")));
123 QVERIFY(!window->activities().contains(QLatin1String(
"bar")));
126 xcb_unmap_window(c.get(), windowId);
127 xcb_destroy_window(c.get(), windowId);
132 QVERIFY(windowClosedSpy.wait());
138#include "activities_test.moc"
static Workspace * self()
void windowAdded(KWin::Window *)
QList< Output * > outputs() const
void setActiveOutput(Output *output)
#define WAYLANDTEST_MAIN(TestObject)
void setOutputConfig(const QList< QRect > &geometries)
XcbConnectionPtr createX11Connection()
std::unique_ptr< xcb_connection_t, XcbConnectionDeleter > XcbConnectionPtr
KWIN_EXPORT xcb_window_t rootWindow()
WaylandServer * waylandServer()
InputRedirection * input()