Merge lp:~dandrader/qtmir/detachPromptSurfaces into lp:qtmir

Proposed by Daniel d'Andrada
Status: Superseded
Proposed branch: lp:~dandrader/qtmir/detachPromptSurfaces
Merge into: lp:qtmir
Prerequisite: lp:~dandrader/qtmir/fixProxySurfaceListCount
Diff against target: 397 lines (+44/-88)
14 files modified
debian/control (+2/-2)
debian/gles-patches/convert-to-gles.patch (+1/-1)
src/modules/Unity/Application/application.cpp (+7/-0)
src/modules/Unity/Application/application.h (+2/-0)
src/modules/Unity/Application/mirsurface.cpp (+0/-5)
src/modules/Unity/Application/mirsurface.h (+0/-4)
src/modules/Unity/Application/mirsurfacelistmodel.cpp (+11/-0)
src/modules/Unity/Application/session.cpp (+12/-24)
src/modules/Unity/Application/session.h (+2/-5)
src/modules/Unity/Application/session_interface.h (+3/-0)
tests/framework/fake_mirsurface.h (+0/-4)
tests/framework/fake_session.cpp (+2/-0)
tests/framework/fake_session.h (+2/-0)
tests/modules/SessionManager/session_test.cpp (+0/-43)
To merge this branch: bzr merge lp:~dandrader/qtmir/detachPromptSurfaces
Reviewer Review Type Date Requested Status
Nick Dedekind (community) Needs Fixing
Unity8 CI Bot (community) continuous-integration Needs Fixing
Review via email: mp+294954@code.launchpad.net

This proposal has been superseded by a proposal from 2016-05-18.

Commit message

Move prompt surfaces from MirSurface to Application and emit firstChanged signal

Description of the change

* Are there any related MPs required for this MP to build/function as expected? Please list.
https://code.launchpad.net/~dandrader/unity-api/detachPromptSurfaces/+merge/294955
https://code.launchpad.net/~dandrader/unity8/detachPromptSurfaces/+merge/294959

* Did you perform an exploratory manual test run of your code change and any related functionality?
Yes

* If you changed the packaging (debian), did you subscribe the ubuntu-unity team to this MP?
Not applicable

To post a comment you must log in.
489. By Daniel d'Andrada

Update unity-api versions

Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote :
review: Needs Fixing (continuous-integration)
490. By Daniel d'Andrada

Fix code

Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Nick Dedekind (nick-dedekind) :
review: Needs Fixing
Revision history for this message
Daniel d'Andrada (dandrader) wrote :

Replied to inline comment

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/control'
--- debian/control 2016-04-28 12:48:42 +0000
+++ debian/control 2016-05-17 19:58:11 +0000
@@ -22,7 +22,7 @@
22 libubuntu-app-launch2-dev (>= 0.9),22 libubuntu-app-launch2-dev (>= 0.9),
23 libubuntu-application-api-dev (>= 2.1.0),23 libubuntu-application-api-dev (>= 2.1.0),
24 libudev-dev,24 libudev-dev,
25 libunity-api-dev (>= 7.110),25 libunity-api-dev (>= 7.112),
26 liburl-dispatcher1-dev,26 liburl-dispatcher1-dev,
27 libxkbcommon-dev,27 libxkbcommon-dev,
28 libxrender-dev,28 libxrender-dev,
@@ -93,7 +93,7 @@
93Conflicts: libqtmir,93Conflicts: libqtmir,
94 libunity-mir1,94 libunity-mir1,
95Provides: unity-application-impl,95Provides: unity-application-impl,
96 unity-application-impl-15,96 unity-application-impl-16,
97Description: Qt plugin for Unity specific Mir APIs97Description: Qt plugin for Unity specific Mir APIs
98 QtMir provides Qt/QML bindings for Mir features that are exposed through the98 QtMir provides Qt/QML bindings for Mir features that are exposed through the
99 qtmir-desktop or qtmir-android QPA plugin such as Application management99 qtmir-desktop or qtmir-android QPA plugin such as Application management
100100
=== modified file 'debian/gles-patches/convert-to-gles.patch'
--- debian/gles-patches/convert-to-gles.patch 2016-04-06 18:12:31 +0000
+++ debian/gles-patches/convert-to-gles.patch 2016-05-17 19:58:11 +0000
@@ -84,7 +84,7 @@
84-Conflicts: libqtmir,84-Conflicts: libqtmir,
85- libunity-mir1,85- libunity-mir1,
86-Provides: unity-application-impl,86-Provides: unity-application-impl,
87- unity-application-impl-15,87- unity-application-impl-16,
88-Description: Qt plugin for Unity specific Mir APIs88-Description: Qt plugin for Unity specific Mir APIs
89- QtMir provides Qt/QML bindings for Mir features that are exposed through the89- QtMir provides Qt/QML bindings for Mir features that are exposed through the
90- qtmir-desktop or qtmir-android QPA plugin such as Application management90- qtmir-desktop or qtmir-android QPA plugin such as Application management
9191
=== modified file 'src/modules/Unity/Application/application.cpp'
--- src/modules/Unity/Application/application.cpp 2016-04-26 08:56:36 +0000
+++ src/modules/Unity/Application/application.cpp 2016-05-17 19:58:11 +0000
@@ -486,6 +486,7 @@
486486
487 if (m_session) {487 if (m_session) {
488 m_proxySurfaceList.setSourceList(nullptr);488 m_proxySurfaceList.setSourceList(nullptr);
489 m_proxyPromptSurfaceList.setSourceList(nullptr);
489 m_session->disconnect(this);490 m_session->disconnect(this);
490 m_session->surfaceList()->disconnect(this);491 m_session->surfaceList()->disconnect(this);
491 m_session->setApplication(nullptr);492 m_session->setApplication(nullptr);
@@ -527,6 +528,7 @@
527 Q_EMIT fullscreenChanged(fullscreen());528 Q_EMIT fullscreenChanged(fullscreen());
528529
529 m_proxySurfaceList.setSourceList(m_session->surfaceList());530 m_proxySurfaceList.setSourceList(m_session->surfaceList());
531 m_proxyPromptSurfaceList.setSourceList(m_session->promptSurfaceList());
530 } else {532 } else {
531 // this can only happen after the session has stopped533 // this can only happen after the session has stopped
532 Q_ASSERT(m_state == InternalState::Stopped || m_state == InternalState::StoppedResumable534 Q_ASSERT(m_state == InternalState::Stopped || m_state == InternalState::StoppedResumable
@@ -829,6 +831,11 @@
829 return &m_proxySurfaceList;831 return &m_proxySurfaceList;
830}832}
831833
834unityapp::MirSurfaceListInterface* Application::promptSurfaceList()
835{
836 return &m_proxyPromptSurfaceList;
837}
838
832void Application::requestFocus()839void Application::requestFocus()
833{840{
834 if (m_proxySurfaceList.rowCount() > 0) {841 if (m_proxySurfaceList.rowCount() > 0) {
835842
=== modified file 'src/modules/Unity/Application/application.h'
--- src/modules/Unity/Application/application.h 2016-04-26 08:56:36 +0000
+++ src/modules/Unity/Application/application.h 2016-05-17 19:58:11 +0000
@@ -109,6 +109,7 @@
109 QSize initialSurfaceSize() const override;109 QSize initialSurfaceSize() const override;
110 void setInitialSurfaceSize(const QSize &size) override;110 void setInitialSurfaceSize(const QSize &size) override;
111 unity::shell::application::MirSurfaceListInterface* surfaceList() override;111 unity::shell::application::MirSurfaceListInterface* surfaceList() override;
112 unity::shell::application::MirSurfaceListInterface* promptSurfaceList() override;
112113
113 ProcessState processState() const { return m_processState; }114 ProcessState processState() const { return m_processState; }
114 void setProcessState(ProcessState value);115 void setProcessState(ProcessState value);
@@ -191,6 +192,7 @@
191 bool m_closing{false};192 bool m_closing{false};
192193
193 ProxySurfaceListModel m_proxySurfaceList;194 ProxySurfaceListModel m_proxySurfaceList;
195 ProxySurfaceListModel m_proxyPromptSurfaceList;
194196
195 friend class ApplicationManager;197 friend class ApplicationManager;
196 friend class SessionManager;198 friend class SessionManager;
197199
=== modified file 'src/modules/Unity/Application/mirsurface.cpp'
--- src/modules/Unity/Application/mirsurface.cpp 2016-04-26 08:30:26 +0000
+++ src/modules/Unity/Application/mirsurface.cpp 2016-05-17 19:58:11 +0000
@@ -956,11 +956,6 @@
956 return m_focused;956 return m_focused;
957}957}
958958
959unity::shell::application::MirSurfaceListInterface* MirSurface::promptSurfaceList()
960{
961 return &m_promptSurfaceList;
962}
963
964void MirSurface::requestFocus()959void MirSurface::requestFocus()
965{960{
966 DEBUG_MSG << "()";961 DEBUG_MSG << "()";
967962
=== modified file 'src/modules/Unity/Application/mirsurface.h'
--- src/modules/Unity/Application/mirsurface.h 2016-04-26 08:30:26 +0000
+++ src/modules/Unity/Application/mirsurface.h 2016-05-17 19:58:11 +0000
@@ -88,8 +88,6 @@
8888
89 bool focused() const override;89 bool focused() const override;
9090
91 unity::shell::application::MirSurfaceListInterface* promptSurfaceList() override;
92
93 Q_INVOKABLE void requestFocus() override;91 Q_INVOKABLE void requestFocus() override;
94 Q_INVOKABLE void close() override;92 Q_INVOKABLE void close() override;
95 Q_INVOKABLE void raise() override;93 Q_INVOKABLE void raise() override;
@@ -229,8 +227,6 @@
229 };227 };
230 ClosingState m_closingState{NotClosing};228 ClosingState m_closingState{NotClosing};
231 AbstractTimer *m_closeTimer{nullptr};229 AbstractTimer *m_closeTimer{nullptr};
232
233 MirSurfaceListModel m_promptSurfaceList;
234};230};
235231
236} // namespace qtmir232} // namespace qtmir
237233
=== modified file 'src/modules/Unity/Application/mirsurfacelistmodel.cpp'
--- src/modules/Unity/Application/mirsurfacelistmodel.cpp 2016-05-17 19:58:11 +0000
+++ src/modules/Unity/Application/mirsurfacelistmodel.cpp 2016-05-17 19:58:11 +0000
@@ -68,6 +68,7 @@
68 Q_EMIT countChanged();68 Q_EMIT countChanged();
69 if (count() == 1) {69 if (count() == 1) {
70 Q_EMIT emptyChanged();70 Q_EMIT emptyChanged();
71 Q_EMIT firstChanged();
71 }72 }
72}73}
7374
@@ -88,6 +89,9 @@
88 if (count() == 0) {89 if (count() == 0) {
89 Q_EMIT emptyChanged();90 Q_EMIT emptyChanged();
90 }91 }
92 if (i == 0) {
93 Q_EMIT firstChanged();
94 }
91 }95 }
92}96}
9397
@@ -105,6 +109,10 @@
105 m_surfaceList.move(from, to);109 m_surfaceList.move(from, to);
106 endMoveRows();110 endMoveRows();
107 }111 }
112
113 if ((from == 0 || to == 0) && m_surfaceList.count() > 1) {
114 Q_EMIT firstChanged();
115 }
108}116}
109117
110unityapp::MirSurfaceInterface *MirSurfaceListModel::get(int index)118unityapp::MirSurfaceInterface *MirSurfaceListModel::get(int index)
@@ -143,6 +151,7 @@
143 if (wasEmpty) {151 if (wasEmpty) {
144 Q_EMIT emptyChanged();152 Q_EMIT emptyChanged();
145 }153 }
154 Q_EMIT firstChanged();
146}155}
147156
148void MirSurfaceListModel::addSurfaceList(MirSurfaceListModel *surfaceListModel)157void MirSurfaceListModel::addSurfaceList(MirSurfaceListModel *surfaceListModel)
@@ -233,6 +242,8 @@
233 connect(m_sourceList, &QObject::destroyed, this, [this]() { this->setSourceList(nullptr); });242 connect(m_sourceList, &QObject::destroyed, this, [this]() { this->setSourceList(nullptr); });
234 connect(m_sourceList, &unityapp::MirSurfaceListInterface::countChanged,243 connect(m_sourceList, &unityapp::MirSurfaceListInterface::countChanged,
235 this, &unityapp::MirSurfaceListInterface::countChanged);244 this, &unityapp::MirSurfaceListInterface::countChanged);
245 connect(m_sourceList, &unityapp::MirSurfaceListInterface::firstChanged,
246 this, &unityapp::MirSurfaceListInterface::firstChanged);
236 }247 }
237248
238 endResetModel();249 endResetModel();
239250
=== modified file 'src/modules/Unity/Application/session.cpp'
--- src/modules/Unity/Application/session.cpp 2016-05-10 20:13:37 +0000
+++ src/modules/Unity/Application/session.cpp 2016-05-17 19:58:11 +0000
@@ -137,6 +137,11 @@
137 return &m_surfaceList;137 return &m_surfaceList;
138}138}
139139
140MirSurfaceListModel* Session::promptSurfaceList()
141{
142 return &m_promptSurfaceList;
143}
144
140Session::State Session::state() const145Session::State Session::state() const
141{146{
142 return m_state;147 return m_state;
@@ -199,14 +204,8 @@
199 if (newSurface->isFirstFrameDrawn()) {204 if (newSurface->isFirstFrameDrawn()) {
200 prependSurface(newSurface);205 prependSurface(newSurface);
201 } else {206 } else {
202 m_blankSurfaces.append(newSurface);
203 connect(newSurface, &QObject::destroyed, this, [this, newSurface]()
204 {
205 this->m_blankSurfaces.removeAll(newSurface);
206 });
207 connect(newSurface, &MirSurfaceInterface::firstFrameDrawn, this, [this, newSurface]()207 connect(newSurface, &MirSurfaceInterface::firstFrameDrawn, this, [this, newSurface]()
208 {208 {
209 this->m_blankSurfaces.removeAll(newSurface);
210 newSurface->disconnect(this);209 newSurface->disconnect(this);
211 this->prependSurface(newSurface);210 this->prependSurface(newSurface);
212 });211 });
@@ -393,32 +392,19 @@
393void Session::addChildSession(SessionInterface* session)392void Session::addChildSession(SessionInterface* session)
394{393{
395 insertChildSession(m_children->rowCount(), session);394 insertChildSession(m_children->rowCount(), session);
396
397 if (m_surfaceList.count() > 0) {
398 // we assume that the top-most surface is the one that caused the prompt session to show up.
399 auto promptSurfaceList = static_cast<MirSurfaceListModel*>(m_surfaceList.get(0)->promptSurfaceList());
400 promptSurfaceList->addSurfaceList(session->surfaceList());
401 } else if (m_blankSurfaces.count() > 0) {
402 // Prompt session came in too early.
403 // Parent session might be blocked until the prompt session is dismissed.
404 // So we cannot wait anymore and must put that blank surface on the surface list so that the
405 // user can see the prompt surface on top of that it and interact.
406 auto blankSurface = m_blankSurfaces.takeFirst();
407
408 auto promptSurfaceList = static_cast<MirSurfaceListModel*>(blankSurface->promptSurfaceList());
409 promptSurfaceList->addSurfaceList(session->surfaceList());
410
411 blankSurface->disconnect(this);
412 prependSurface(blankSurface);
413 }
414}395}
415396
416void Session::insertChildSession(uint index, SessionInterface* session)397void Session::insertChildSession(uint index, SessionInterface* session)
417{398{
418 qCDebug(QTMIR_SESSIONS) << "Session::insertChildSession - " << session->name() << " to " << name() << " @ " << index;399 qCDebug(QTMIR_SESSIONS) << "Session::insertChildSession - " << session->name() << " to " << name() << " @ " << index;
400 Q_ASSERT(!m_children->contains(session));
419401
420 m_children->insert(index, session);402 m_children->insert(index, session);
421403
404 // Flatten the list of prompt surfaces
405 m_promptSurfaceList.addSurfaceList(session->surfaceList());
406 m_promptSurfaceList.addSurfaceList(session->promptSurfaceList());
407
422 connect(session, &QObject::destroyed, this, [this, session]() { this->removeChildSession(session); });408 connect(session, &QObject::destroyed, this, [this, session]() { this->removeChildSession(session); });
423409
424 switch (m_state) {410 switch (m_state) {
@@ -444,6 +430,8 @@
444430
445 if (m_children->contains(session)) {431 if (m_children->contains(session)) {
446 m_children->remove(session);432 m_children->remove(session);
433 m_promptSurfaceList.removeSurfaceList(session->surfaceList());
434 m_promptSurfaceList.removeSurfaceList(session->promptSurfaceList());
447 }435 }
448436
449 deleteIfZombieAndEmpty();437 deleteIfZombieAndEmpty();
450438
=== modified file 'src/modules/Unity/Application/session.h'
--- src/modules/Unity/Application/session.h 2016-05-10 20:13:37 +0000
+++ src/modules/Unity/Application/session.h 2016-05-17 19:58:11 +0000
@@ -51,6 +51,7 @@
51 QString name() const override;51 QString name() const override;
52 unity::shell::application::ApplicationInfoInterface* application() const override;52 unity::shell::application::ApplicationInfoInterface* application() const override;
53 MirSurfaceListModel* surfaceList() override;53 MirSurfaceListModel* surfaceList() override;
54 MirSurfaceListModel* promptSurfaceList() override;
54 State state() const override;55 State state() const override;
55 bool fullscreen() const override;56 bool fullscreen() const override;
56 bool live() const override;57 bool live() const override;
@@ -107,11 +108,7 @@
107 std::shared_ptr<mir::scene::Session> m_session;108 std::shared_ptr<mir::scene::Session> m_session;
108 Application* m_application;109 Application* m_application;
109 MirSurfaceListModel m_surfaceList;110 MirSurfaceListModel m_surfaceList;
110111 MirSurfaceListModel m_promptSurfaceList;
111 // Registered surfaces that haven't yet drawn their first frames.
112 // Once they do, they get moved to m_surfaceList.
113 // So this list is just a temporary holder and most of the time it's gonna be empty.
114 QList<MirSurfaceInterface*> m_blankSurfaces;
115112
116 SessionModel* m_children;113 SessionModel* m_children;
117 bool m_fullscreen;114 bool m_fullscreen;
118115
=== modified file 'src/modules/Unity/Application/session_interface.h'
--- src/modules/Unity/Application/session_interface.h 2016-04-06 16:52:49 +0000
+++ src/modules/Unity/Application/session_interface.h 2016-05-17 19:58:11 +0000
@@ -68,6 +68,9 @@
68 // List of surfaces in this session. Surfaces that are being forcibly closed are not present in this list68 // List of surfaces in this session. Surfaces that are being forcibly closed are not present in this list
69 virtual MirSurfaceListModel* surfaceList() = 0;69 virtual MirSurfaceListModel* surfaceList() = 0;
7070
71 // List of prompt surfaces under this session (and its children)
72 virtual MirSurfaceListModel* promptSurfaceList() = 0;
73
71 virtual SessionModel* childSessions() const = 0;74 virtual SessionModel* childSessions() const = 0;
72 virtual State state() const = 0;75 virtual State state() const = 0;
73 virtual bool fullscreen() const = 0;76 virtual bool fullscreen() const = 0;
7477
=== modified file 'tests/framework/fake_mirsurface.h'
--- tests/framework/fake_mirsurface.h 2016-04-26 08:30:26 +0000
+++ tests/framework/fake_mirsurface.h 2016-05-17 19:58:11 +0000
@@ -77,8 +77,6 @@
7777
78 bool focused() const override { return false; }78 bool focused() const override { return false; }
7979
80 unity::shell::application::MirSurfaceListInterface* promptSurfaceList() override { return &m_promptSurfaceList;}
81
82 void requestFocus() override {80 void requestFocus() override {
83 Q_EMIT focusRequested();81 Q_EMIT focusRequested();
84 }82 }
@@ -175,8 +173,6 @@
175173
176 QList<TouchEvent> m_touchesReceived;174 QList<TouchEvent> m_touchesReceived;
177175
178 MirSurfaceListModel m_promptSurfaceList;
179
180 SessionInterface *m_session{nullptr};176 SessionInterface *m_session{nullptr};
181};177};
182178
183179
=== modified file 'tests/framework/fake_session.cpp'
--- tests/framework/fake_session.cpp 2016-03-28 18:02:26 +0000
+++ tests/framework/fake_session.cpp 2016-05-17 19:58:11 +0000
@@ -36,6 +36,8 @@
3636
37MirSurfaceListModel* FakeSession::surfaceList() { return &m_surfaceList; }37MirSurfaceListModel* FakeSession::surfaceList() { return &m_surfaceList; }
3838
39MirSurfaceListModel* FakeSession::promptSurfaceList() { return &m_promptSurfaceList; }
40
39SessionModel *FakeSession::childSessions() const { return nullptr; }41SessionModel *FakeSession::childSessions() const { return nullptr; }
4042
41SessionInterface::State FakeSession::state() const { return m_state; }43SessionInterface::State FakeSession::state() const { return m_state; }
4244
=== modified file 'tests/framework/fake_session.h'
--- tests/framework/fake_session.h 2016-03-28 18:02:26 +0000
+++ tests/framework/fake_session.h 2016-05-17 19:58:11 +0000
@@ -34,6 +34,7 @@
34 QString name() const override;34 QString name() const override;
35 unity::shell::application::ApplicationInfoInterface* application() const override;35 unity::shell::application::ApplicationInfoInterface* application() const override;
36 MirSurfaceListModel* surfaceList() override;36 MirSurfaceListModel* surfaceList() override;
37 MirSurfaceListModel* promptSurfaceList() override;
37 SessionModel* childSessions() const override;38 SessionModel* childSessions() const override;
38 State state() const override;39 State state() const override;
39 bool fullscreen() const override;40 bool fullscreen() const override;
@@ -81,6 +82,7 @@
81 State m_state;82 State m_state;
82 std::shared_ptr<mir::scene::Session> m_session;83 std::shared_ptr<mir::scene::Session> m_session;
83 MirSurfaceListModel m_surfaceList;84 MirSurfaceListModel m_surfaceList;
85 MirSurfaceListModel m_promptSurfaceList;
84};86};
8587
86} // namespace qtmi88} // namespace qtmi
8789
=== modified file 'tests/modules/SessionManager/session_test.cpp'
--- tests/modules/SessionManager/session_test.cpp 2016-05-10 20:13:37 +0000
+++ tests/modules/SessionManager/session_test.cpp 2016-05-17 19:58:11 +0000
@@ -311,46 +311,3 @@
311 EXPECT_EQ(Session::Stopped, session->state());311 EXPECT_EQ(Session::Stopped, session->state());
312 EXPECT_FALSE(session->m_suspendTimer->isRunning());312 EXPECT_FALSE(session->m_suspendTimer->isRunning());
313}313}
314
315/*
316 Regression test for https://bugs.launchpad.net/ubuntu/+source/qtmir/+bug/1578665
317
318 A child prompt session was arriving before the application surface got a chance to draw
319 its first frame. And on top of that, the application was blocked from drawing anything
320 until that prompt session gone away.
321 */
322TEST_F(SessionTests, ChildSessionArrivesBeforeSurfaceDrawnFirstFrame)
323{
324 using namespace testing;
325
326 const QString appId("test-app");
327 const pid_t procId = 5551;
328
329 auto mirSession = std::make_shared<MockSession>(appId.toStdString(), procId);
330
331 auto session = std::make_shared<qtmir::Session>(mirSession, promptSessionManager);
332
333 FakeMirSurface *blankSurface = new FakeMirSurface;
334 session->registerSurface(blankSurface);
335
336 // Surface doesn't appear in this list as it has not drawn its first frame yet
337 EXPECT_EQ(0, session->surfaceList()->count());
338
339 Session* childSession = new Session(mirSession, promptSessionManager);
340 session->addChildSession(childSession);
341
342 FakeMirSurface *promptSurface = new FakeMirSurface;
343 childSession->registerSurface(promptSurface);
344 promptSurface->drawFirstFrame();
345
346 // Even though blankSurface still hasn't drawn its first frame (ie, it's still blank),
347 // it should now appear in this list as it now has a child prompt surface, which the
348 // user must interact with.
349 auto sessionSurfaceList = static_cast<MirSurfaceListModel*>(session->surfaceList());
350 EXPECT_EQ(1, sessionSurfaceList->count());
351 EXPECT_TRUE(sessionSurfaceList->contains(blankSurface));
352
353 auto promptSurfaceList = static_cast<MirSurfaceListModel*>(blankSurface->promptSurfaceList());
354 EXPECT_EQ(1, promptSurfaceList->count());
355 EXPECT_TRUE(promptSurfaceList->contains(promptSurface));
356}

Subscribers

People subscribed via source and target branches