22#include <KWayland/Client/surface.h>
24#include <linux/input.h>
28static const QString s_socketName = QStringLiteral(
"wayland_test_effects_popup_open_close_animation-0");
39 void testAnimatePopups();
40 void testAnimateUserActionsPopup();
41 void testAnimateDecorationTooltips();
44void PopupOpenCloseAnimationTest::initTestCase()
46 qputenv(
"XDG_DATA_DIRS", QCoreApplication::applicationDirPath().toUtf8());
48 qRegisterMetaType<KWin::Window *>();
49 qRegisterMetaType<KWin::InternalWindow *>();
53 QRect(0, 0, 1280, 1024),
54 QRect(1280, 0, 1280, 1024),
57 auto config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig);
58 KConfigGroup plugins(config, QStringLiteral(
"Plugins"));
60 for (
const QString &name : builtinNames) {
61 plugins.writeEntry(name + QStringLiteral(
"Enabled"),
false);
64 kwinApp()->setConfig(config);
66 qputenv(
"KWIN_EFFECTS_FORCE_ANIMATIONS", QByteArrayLiteral(
"1"));
69 QVERIFY(applicationStartedSpy.wait());
72void PopupOpenCloseAnimationTest::init()
77void PopupOpenCloseAnimationTest::cleanup()
86void PopupOpenCloseAnimationTest::testAnimatePopups()
93 QVERIFY(mainWindowSurface !=
nullptr);
95 QVERIFY(mainWindowShellSurface !=
nullptr);
100 const QString effectName = QStringLiteral(
"fadingpopups");
110 QVERIFY(popupSurface !=
nullptr);
112 positioner->set_size(20, 20);
113 positioner->set_anchor_rect(0, 0, 10, 10);
114 positioner->set_gravity(Test::XdgPositioner::gravity_bottom_right);
115 positioner->set_anchor(Test::XdgPositioner::anchor_bottom_left);
116 std::unique_ptr<Test::XdgPopup> popupShellSurface(
Test::createXdgPopupSurface(popupSurface.get(), mainWindowShellSurface->xdgSurface(), positioner.get()));
117 QVERIFY(popupShellSurface !=
nullptr);
120 QVERIFY(popup->isPopupWindow());
121 QCOMPARE(popup->transientFor(), mainWindow);
128 QSignalSpy popupClosedSpy(popup, &Window::closed);
129 popupShellSurface.reset();
130 popupSurface.reset();
131 QVERIFY(popupClosedSpy.wait());
138 mainWindowSurface.reset();
142void PopupOpenCloseAnimationTest::testAnimateUserActionsPopup()
149 QVERIFY(surface !=
nullptr);
151 QVERIFY(shellSurface !=
nullptr);
156 const QString effectName = QStringLiteral(
"fadingpopups");
167 QTRY_VERIFY(userActionsMenu->isShown());
168 QVERIFY(userActionsMenu->hasWindow());
177 QTRY_VERIFY(!userActionsMenu->isShown());
178 QVERIFY(!userActionsMenu->hasWindow());
189void PopupOpenCloseAnimationTest::testAnimateDecorationTooltips()
196 QVERIFY(surface !=
nullptr);
198 QVERIFY(shellSurface !=
nullptr);
200 QVERIFY(deco !=
nullptr);
203 deco->set_mode(Test::XdgToplevelDecorationV1::mode_server_side);
204 surface->commit(KWayland::Client::Surface::CommitFlag::None);
205 QVERIFY(surfaceConfigureRequestedSpy.wait());
207 shellSurface->xdgSurface()->ack_configure(surfaceConfigureRequestedSpy.last().at(0).value<quint32>());
210 QVERIFY(window->isDecorated());
213 const QString effectName = QStringLiteral(
"fadingpopups");
223 window->decoratedClient()->requestShowToolTip(QStringLiteral(
"KWin rocks!"));
224 QVERIFY(tooltipAddedSpy.wait());
228 QVERIFY(tooltip->
handle()->flags().testFlag(Qt::ToolTip));
235 QSignalSpy tooltipClosedSpy(tooltip, &InternalWindow::closed);
236 window->decoratedClient()->requestHideToolTip();
237 QVERIFY(tooltipClosedSpy.wait());
249#include "popup_open_close_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
bool isInternal() const override
bool isPopupWindow() const override
void configureRequested(quint32 serial)
void showWindowMenu(const QRect &pos, Window *cl)
void windowAdded(KWin::Window *)
UserActionsMenu * userActionsMenu() const
virtual bool isActive() const
#define WAYLANDTEST_MAIN(TestObject)
XdgPositioner * createXdgPositioner()
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)
XdgPopup * createXdgPopupSurface(KWayland::Client::Surface *surface, XdgSurface *parentSurface, XdgPositioner *positioner, CreationSetup configureMode=CreationSetup::CreateAndConfigure, QObject *parent=nullptr)
void destroyWaylandConnection()
void setOutputConfig(const QList< QRect > &geometries)
void keyboardKeyPressed(quint32 key, quint32 time)
bool setupWaylandConnection(AdditionalWaylandInterfaces flags=AdditionalWaylandInterfaces())
std::unique_ptr< KWayland::Client::Surface > createSurface()
XdgToplevel * createXdgToplevelSurface(KWayland::Client::Surface *surface, QObject *parent=nullptr)
XdgToplevelDecorationV1 * createXdgToplevelDecorationV1(XdgToplevel *toplevel, QObject *parent=nullptr)
bool waitForWindowClosed(Window *window)
WaylandServer * waylandServer()