Verify that the client supports the compositor removing outputs

Change-Id: I799d29fa43ad429b7973d7a210aca554d6b0ce26
Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
This commit is contained in:
Johan Klokkhammer Helsing 2017-08-28 16:05:43 +02:00 committed by Johan Helsing
parent 679dc2e281
commit 2b32defc38
4 changed files with 35 additions and 0 deletions

View File

@ -138,6 +138,7 @@ public slots:
private slots:
void primaryScreen();
void screens();
void windowScreens();
void createDestroyWindow();
void events();
@ -158,6 +159,17 @@ void tst_WaylandClient::primaryScreen()
QTRY_COMPARE(QGuiApplication::primaryScreen()->size(), screenSize);
}
void tst_WaylandClient::screens()
{
QTRY_COMPARE(QGuiApplication::screens().size(), 1);
compositor->sendAddOutput();
QTRY_COMPARE(QGuiApplication::screens().size(), 2);
QSharedPointer<MockOutput> secondOutput;
QTRY_VERIFY(secondOutput = compositor->output(1));
compositor->sendRemoveOutput(secondOutput);
QTRY_COMPARE(QGuiApplication::screens().size(), 1);
}
void tst_WaylandClient::windowScreens()
{
QSharedPointer<MockOutput> firstOutput;
@ -191,6 +203,10 @@ void tst_WaylandClient::windowScreens()
compositor->sendSurfaceLeave(surface, firstOutput);
QTRY_COMPARE(window.screen(), secondaryScreen);
compositor->sendRemoveOutput(secondOutput);
QTRY_COMPARE(QGuiApplication::screens().size(), 1);
QCOMPARE(window.screen(), primaryScreen);
window.destroy();
QTRY_VERIFY(!compositor->surface());
}

View File

@ -189,6 +189,13 @@ void MockCompositor::sendAddOutput()
processCommand(command);
}
void MockCompositor::sendRemoveOutput(const QSharedPointer<MockOutput> &output)
{
Command command = makeCommand(Impl::Compositor::sendRemoveOutput, m_compositor);
command.parameters << QVariant::fromValue(output);
processCommand(command);
}
void MockCompositor::sendSurfaceEnter(const QSharedPointer<MockSurface> &surface, QSharedPointer<MockOutput> &output)
{
Command command = makeCommand(Impl::Compositor::sendSurfaceEnter, m_compositor);

View File

@ -88,6 +88,7 @@ public:
static void waitForStartDrag(void *data, const QList<QVariant> &parameters);
static void setOutputMode(void *compositor, const QList<QVariant> &parameters);
static void sendAddOutput(void *data, const QList<QVariant> &parameters);
static void sendRemoveOutput(void *data, const QList<QVariant> &parameters);
static void sendSurfaceEnter(void *data, const QList<QVariant> &parameters);
static void sendSurfaceLeave(void *data, const QList<QVariant> &parameters);
@ -179,6 +180,7 @@ public:
void sendDataDeviceDrop(const QSharedPointer<MockSurface> &surface);
void sendDataDeviceLeave(const QSharedPointer<MockSurface> &surface);
void sendAddOutput();
void sendRemoveOutput(const QSharedPointer<MockOutput> &output);
void sendSurfaceEnter(const QSharedPointer<MockSurface> &surface, QSharedPointer<MockOutput> &output);
void sendSurfaceLeave(const QSharedPointer<MockSurface> &surface, QSharedPointer<MockOutput> &output);
void waitForStartDrag();

View File

@ -44,6 +44,16 @@ void Compositor::sendAddOutput(void *data, const QList<QVariant> &parameters) {
compositor->dispatchEvents();
}
void Compositor::sendRemoveOutput(void *data, const QList<QVariant> &parameters) {
Compositor *compositor = static_cast<Compositor *>(data);
Q_ASSERT(compositor);
Output *output = resolveOutput(parameters.first());
Q_ASSERT(output);
bool wasRemoved = compositor->m_outputs.removeOne(output);
Q_ASSERT(wasRemoved);
delete output;
}
void Compositor::setOutputMode(void *data, const QList<QVariant> &parameters)
{
Compositor *compositor = static_cast<Compositor *>(data);