12#include "compositor.h"
20#include <KWayland/Client/surface.h>
24static const QString s_socketName = QStringLiteral(
"wayland_test_effects_maximize_animation-0");
35 void testMaximizeRestore();
38void MaximizeAnimationTest::initTestCase()
41 QSKIP(
"no render node available");
44 qputenv(
"XDG_DATA_DIRS", QCoreApplication::applicationDirPath().toUtf8());
46 qRegisterMetaType<KWin::Window *>();
50 QRect(0, 0, 1280, 1024),
51 QRect(1280, 0, 1280, 1024),
54 auto config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig);
55 KConfigGroup plugins(config, QStringLiteral(
"Plugins"));
57 for (
const QString &name : builtinNames) {
58 plugins.writeEntry(name + QStringLiteral(
"Enabled"),
false);
61 kwinApp()->setConfig(config);
63 qputenv(
"KWIN_COMPOSE", QByteArrayLiteral(
"O2"));
64 qputenv(
"KWIN_EFFECTS_FORCE_ANIMATIONS", QByteArrayLiteral(
"1"));
67 QVERIFY(applicationStartedSpy.wait());
70void MaximizeAnimationTest::init()
75void MaximizeAnimationTest::cleanup()
84void MaximizeAnimationTest::testMaximizeRestore()
91 QVERIFY(surface !=
nullptr);
96 Test::XdgToplevel::States states;
100 surface->commit(KWayland::Client::Surface::CommitFlag::None);
102 QVERIFY(surfaceConfigureRequestedSpy.wait());
103 QCOMPARE(surfaceConfigureRequestedSpy.count(), 1);
104 QCOMPARE(toplevelConfigureRequestedSpy.last().at(0).value<QSize>(), QSize(0, 0));
105 states = toplevelConfigureRequestedSpy.last().at(1).value<Test::XdgToplevel::States>();
106 QVERIFY(!states.testFlag(Test::XdgToplevel::State::Activated));
107 QVERIFY(!states.testFlag(Test::XdgToplevel::State::Maximized));
110 shellSurface->xdgSurface()->ack_configure(surfaceConfigureRequestedSpy.last().at(0).value<quint32>());
113 QVERIFY(window->isActive());
114 QCOMPARE(window->maximizeMode(), MaximizeMode::MaximizeRestore);
117 QVERIFY(surfaceConfigureRequestedSpy.wait());
118 QCOMPARE(surfaceConfigureRequestedSpy.count(), 2);
119 states = toplevelConfigureRequestedSpy.last().at(1).value<Test::XdgToplevel::States>();
120 QVERIFY(states.testFlag(Test::XdgToplevel::State::Activated));
121 QVERIFY(!states.testFlag(Test::XdgToplevel::State::Maximized));
124 const QString effectName = QStringLiteral(
"maximize");
134 QSignalSpy frameGeometryChangedSpy(window, &Window::frameGeometryChanged);
135 QSignalSpy maximizeChangedSpy(window, &Window::maximizedChanged);
138 QVERIFY(surfaceConfigureRequestedSpy.wait());
139 QCOMPARE(surfaceConfigureRequestedSpy.count(), 3);
140 QCOMPARE(toplevelConfigureRequestedSpy.last().at(0).value<QSize>(), QSize(1280, 1024));
141 states = toplevelConfigureRequestedSpy.last().at(1).value<Test::XdgToplevel::States>();
142 QVERIFY(states.testFlag(Test::XdgToplevel::State::Activated));
143 QVERIFY(states.testFlag(Test::XdgToplevel::State::Maximized));
146 shellSurface->xdgSurface()->ack_configure(surfaceConfigureRequestedSpy.last().at(0).value<quint32>());
147 Test::render(surface.get(), QSize(1280, 1024), Qt::red);
148 QVERIFY(frameGeometryChangedSpy.wait());
149 QCOMPARE(frameGeometryChangedSpy.count(), 1);
150 QCOMPARE(maximizeChangedSpy.count(), 1);
151 QCOMPARE(window->maximizeMode(), MaximizeMode::MaximizeFull);
159 QVERIFY(surfaceConfigureRequestedSpy.wait());
160 QCOMPARE(surfaceConfigureRequestedSpy.count(), 4);
161 QCOMPARE(toplevelConfigureRequestedSpy.last().at(0).value<QSize>(), QSize(100, 50));
162 states = toplevelConfigureRequestedSpy.last().at(1).value<Test::XdgToplevel::States>();
163 QVERIFY(states.testFlag(Test::XdgToplevel::State::Activated));
164 QVERIFY(!states.testFlag(Test::XdgToplevel::State::Maximized));
167 shellSurface->xdgSurface()->ack_configure(surfaceConfigureRequestedSpy.last().at(0).value<quint32>());
169 QVERIFY(frameGeometryChangedSpy.wait());
170 QCOMPARE(frameGeometryChangedSpy.count(), 2);
171 QCOMPARE(maximizeChangedSpy.count(), 2);
172 QCOMPARE(window->maximizeMode(), MaximizeMode::MaximizeRestore);
184#include "maximize_animation_test.moc"
Base class for all KWin effects.
QStringList listOfKnownEffects() const override
All the Effects this loader knows of.
QStringList loadedEffects
Q_SCRIPTABLE bool loadEffect(const QString &name)
Effect * findEffect(const QString &name) const
void configureRequested(quint32 serial)
void configureRequested(const QSize &size, KWin::Test::XdgToplevel::States states)
void slotWindowMaximize()
virtual bool isActive() const
#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())
void render(KWayland::Client::Surface *surface, const QSize &size, const QColor &color, const QImage::Format &format=QImage::Format_ARGB32_Premultiplied)
bool renderNodeAvailable()
std::unique_ptr< KWayland::Client::Surface > createSurface()
XdgToplevel * createXdgToplevelSurface(KWayland::Client::Surface *surface, QObject *parent=nullptr)
bool waitForWindowClosed(Window *window)
WaylandServer * waylandServer()