13#include "virtualdesktops.h"
18#include <KWayland/Client/surface.h>
22static const QString s_socketName = QStringLiteral(
"wayland_test_kwin_virtualdesktop-0");
32 void testNetCurrentDesktop();
33 void testLastDesktopRemoved();
34 void testWindowOnMultipleDesktops();
35 void testRemoveDesktopWithWindow();
38void VirtualDesktopTest::initTestCase()
40 qRegisterMetaType<KWin::Window *>();
44 QRect(0, 0, 1280, 1024),
45 QRect(1280, 0, 1280, 1024),
48 kwinApp()->setConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig));
49 qputenv(
"KWIN_XKB_DEFAULT_KEYMAP",
"1");
50 qputenv(
"XKB_DEFAULT_RULES",
"evdev");
53 QVERIFY(applicationStartedSpy.wait());
55 if (kwinApp()->x11Connection()) {
57 Xcb::Atom currentDesktopAtom(
"_NET_CURRENT_DESKTOP");
58 QVERIFY(currentDesktopAtom.isValid());
59 Xcb::Property currentDesktop(0, kwinApp()->x11RootWindow(), currentDesktopAtom, XCB_ATOM_CARDINAL, 0, 1);
61 QCOMPARE(currentDesktop.value(0, &ok), 0);
66void VirtualDesktopTest::init()
70 VirtualDesktopManager::self()->setCount(1);
73void VirtualDesktopTest::cleanup()
78void VirtualDesktopTest::testNetCurrentDesktop()
80 if (!kwinApp()->x11Connection()) {
81 QSKIP(
"Skipped on Wayland only");
83 QCOMPARE(VirtualDesktopManager::self()->count(), 1u);
84 VirtualDesktopManager::self()->setCount(4);
85 QCOMPARE(VirtualDesktopManager::self()->count(), 4u);
87 Xcb::Atom currentDesktopAtom(
"_NET_CURRENT_DESKTOP");
88 QVERIFY(currentDesktopAtom.isValid());
89 Xcb::Property currentDesktop(0, kwinApp()->x11RootWindow(), currentDesktopAtom, XCB_ATOM_CARDINAL, 0, 1);
91 QCOMPARE(currentDesktop.value(0, &ok), 0);
95 VirtualDesktopManager::self()->setCurrent(2);
96 currentDesktop =
Xcb::Property(0, kwinApp()->x11RootWindow(), currentDesktopAtom, XCB_ATOM_CARDINAL, 0, 1);
97 QCOMPARE(currentDesktop.value(0, &ok), 1);
101 VirtualDesktopManager::self()->setCurrent(3);
102 currentDesktop =
Xcb::Property(0, kwinApp()->x11RootWindow(), currentDesktopAtom, XCB_ATOM_CARDINAL, 0, 1);
103 QCOMPARE(currentDesktop.value(0, &ok), 2);
107 VirtualDesktopManager::self()->setCurrent(4);
108 currentDesktop =
Xcb::Property(0, kwinApp()->x11RootWindow(), currentDesktopAtom, XCB_ATOM_CARDINAL, 0, 1);
109 QCOMPARE(currentDesktop.value(0, &ok), 3);
113 VirtualDesktopManager::self()->setCurrent(1);
114 currentDesktop =
Xcb::Property(0, kwinApp()->x11RootWindow(), currentDesktopAtom, XCB_ATOM_CARDINAL, 0, 1);
115 QCOMPARE(currentDesktop.value(0, &ok), 0);
119void VirtualDesktopTest::testLastDesktopRemoved()
122 QCOMPARE(VirtualDesktopManager::self()->count(), 1u);
123 VirtualDesktopManager::self()->setCount(2);
124 QCOMPARE(VirtualDesktopManager::self()->count(), 2u);
127 VirtualDesktopManager::self()->setCurrent(VirtualDesktopManager::self()->desktops().last());
128 QCOMPARE(VirtualDesktopManager::self()->current(), 2u);
136 QCOMPARE(window->desktops().count(), 1u);
137 QCOMPARE(VirtualDesktopManager::self()->currentDesktop(), window->desktops().first());
140 VirtualDesktopManager::self()->setCount(1);
141 QCOMPARE(VirtualDesktopManager::self()->count(), 1u);
143 QCOMPARE(window->desktops().count(), 1u);
144 QCOMPARE(VirtualDesktopManager::self()->currentDesktop(), window->desktops().first());
147void VirtualDesktopTest::testWindowOnMultipleDesktops()
150 QCOMPARE(VirtualDesktopManager::self()->count(), 1u);
151 VirtualDesktopManager::self()->setCount(3);
152 QCOMPARE(VirtualDesktopManager::self()->count(), 3u);
155 const auto desktops = VirtualDesktopManager::self()->desktops();
156 VirtualDesktopManager::self()->setCurrent(desktops.at(2));
163 QCOMPARE(window->desktops(), (QList<VirtualDesktop *>{desktops.at(2)}));
166 window->enterDesktop(VirtualDesktopManager::self()->desktopForX11Id(2));
167 QCOMPARE(window->desktops().count(), 2u);
168 QCOMPARE(window->desktops()[0], desktops.at(2));
169 QCOMPARE(window->desktops()[1], desktops.at(1));
172 window->leaveDesktop(desktops.at(2));
173 QCOMPARE(window->desktops(), (QList<VirtualDesktop *>{desktops.at(1)}));
175 window->leaveDesktop(desktops.at(1));
176 QCOMPARE(window->desktops(), QList<VirtualDesktop *>{});
178 QVERIFY(window->isOnAllDesktops());
180 window->enterDesktop(desktops.at(0));
181 QVERIFY(window->isOnDesktop(desktops.at(0)));
182 QVERIFY(!window->isOnDesktop(desktops.at(1)));
183 QVERIFY(!window->isOnDesktop(desktops.at(2)));
184 QCOMPARE(window->desktops().count(), 1u);
186 window->enterDesktop(desktops.at(1));
187 QVERIFY(window->isOnDesktop(desktops.at(0)));
188 QVERIFY(window->isOnDesktop(desktops.at(1)));
189 QVERIFY(!window->isOnDesktop(desktops.at(2)));
190 QCOMPARE(window->desktops().count(), 2u);
192 window->enterDesktop(desktops.at(2));
193 QVERIFY(window->isOnDesktop(desktops.at(0)));
194 QVERIFY(window->isOnDesktop(desktops.at(1)));
195 QVERIFY(window->isOnDesktop(desktops.at(2)));
196 QCOMPARE(window->desktops().count(), 3u);
199 window->enterDesktop(desktops.at(2));
200 QCOMPARE(window->desktops().count(), 3u);
203 window->setOnAllDesktops(
true);
204 QCOMPARE(window->desktops().count(), 0u);
205 window->enterDesktop(desktops.at(2));
206 QVERIFY(window->isOnDesktop(desktops.at(2)));
207 QCOMPARE(window->desktops().count(), 1u);
210 window->setOnAllDesktops(
true);
211 QCOMPARE(window->desktops().count(), 0u);
212 window->leaveDesktop(desktops.at(2));
213 QVERIFY(window->isOnDesktop(desktops.at(0)));
214 QVERIFY(window->isOnDesktop(desktops.at(1)));
215 QCOMPARE(window->desktops().count(), 2u);
218void VirtualDesktopTest::testRemoveDesktopWithWindow()
221 QCOMPARE(VirtualDesktopManager::self()->count(), 1u);
222 VirtualDesktopManager::self()->setCount(3);
223 QCOMPARE(VirtualDesktopManager::self()->count(), 3u);
226 VirtualDesktopManager::self()->setCurrent(VirtualDesktopManager::self()->desktops().last());
227 QCOMPARE(VirtualDesktopManager::self()->current(), 3u);
236 QCOMPARE(window->desktops().count(), 1u);
237 QCOMPARE(VirtualDesktopManager::self()->currentDesktop(), window->desktops().first());
240 window->enterDesktop(VirtualDesktopManager::self()->desktops()[1]);
241 QCOMPARE(window->desktops().count(), 2u);
242 QCOMPARE(VirtualDesktopManager::self()->desktops()[2], window->desktops()[0]);
243 QCOMPARE(VirtualDesktopManager::self()->desktops()[1], window->desktops()[1]);
246 VirtualDesktopManager::self()->setCount(2);
247 QCOMPARE(window->desktops().count(), 1u);
249 QCOMPARE(VirtualDesktopManager::self()->desktops()[1], window->desktops()[0]);
252 VirtualDesktopManager::self()->setCount(3);
254 window->enterDesktop(VirtualDesktopManager::self()->desktops()[2]);
255 window->leaveDesktop(VirtualDesktopManager::self()->desktops()[1]);
256 QCOMPARE(window->desktops().count(), 1u);
258 QCOMPARE(VirtualDesktopManager::self()->desktops()[2], window->desktops()[0]);
261 VirtualDesktopManager::self()->setCount(2);
262 QCOMPARE(window->desktops().count(), 1u);
264 QCOMPARE(VirtualDesktopManager::self()->desktops()[1], window->desktops()[0]);
268#include "virtual_desktop_test.moc"
void setActiveOutput(Output *output)
#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 destroyWaylandConnection()
void setOutputConfig(const QList< QRect > &geometries)
bool setupWaylandConnection(AdditionalWaylandInterfaces flags=AdditionalWaylandInterfaces())
std::unique_ptr< KWayland::Client::Surface > createSurface()
XdgToplevel * createXdgToplevelSurface(KWayland::Client::Surface *surface, QObject *parent=nullptr)
WaylandServer * waylandServer()