Merge lp:~nick-dedekind/qtmir/lp1352977 into lp:qtmir

Proposed by Nick Dedekind
Status: Merged
Approved by: Gerry Boland
Approved revision: 230
Merged at revision: 227
Proposed branch: lp:~nick-dedekind/qtmir/lp1352977
Merge into: lp:qtmir
Diff against target: 375 lines (+133/-29)
8 files modified
debian/changelog (+7/-0)
src/modules/Unity/Application/application.cpp (+61/-1)
src/modules/Unity/Application/application.h (+11/-0)
src/modules/Unity/Application/application_manager.cpp (+3/-0)
src/modules/Unity/Application/application_manager.h (+1/-0)
src/modules/Unity/Application/mirsurfaceitem.cpp (+7/-2)
src/modules/Unity/Application/mirsurfacemanager.cpp (+42/-25)
src/modules/Unity/Application/mirsurfacemanager.h (+1/-1)
To merge this branch: bzr merge lp:~nick-dedekind/qtmir/lp1352977
Reviewer Review Type Date Requested Status
Daniel d'Andrada (community) Needs Fixing
Gerry Boland (community) code Approve
Review via email: mp+229942@code.launchpad.net

Commit message

Added application prompt surfaces to allow prompting application which have not yet created a surface

Description of the change

Added application prompt surfaces to allow prompting application which have not yet created a surface

 * Are there any related MPs required for this MP to build/function as expected? Please list.
https://code.launchpad.net/~nick-dedekind/unity8/lp1352977/+merge/229945

 * 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?
No

To post a comment you must log in.
lp:~nick-dedekind/qtmir/lp1352977 updated
226. By Nick Dedekind

rebased

Revision history for this message
Gerry Boland (gerboland) wrote :

No tests?

Revision history for this message
Gerry Boland (gerboland) wrote :

I can see that this approach works, and is reasonably elegant on the QML side for our phone/tablet purposes. But I will ask you to keep in mind the future desktop situation where, unlike phone/tablet, surfaces will have child surfaces, so an application will build up a tree of surfaces. When that situation happens, this separate list approach won't gel at all - I think we'll need to add prompt surfaces just as more nodes in that tree (with a special "I am a prompt session surface" property attached) and work from there.

In fact, I think if we did not have this separation between app surface and trust surfaces, then the problem you're addressing here would not exist.

But for now, this approach will do.

+ for(MirSurfaceItem* promptSurface : promptSurfaces) {
nit-pick, space after "for"

+ if (surface == m_surface || m_promptSurfaces.contains(surface)) return;
please move return to the next line

+ qDebug()
use the categorised logging please.

+void Application::removeSurface(MirSurfaceItem* surface)
add log output here please, is significant enough IMO
Combining management of app surface and trust helper surfaces bit odd here. Think it would be clearer to have 2 methods.

+++ src/modules/Unity/Application/application_manager.cpp
+ m_roleNames.insert(RoleApplication, "application");
why expose the entire Application object? I don't think it's really necessary.

- case RoleFullscreen:
- return QVariant::fromValue(application->fullscreen());
Eh? We need this.

void MirSurfaceItem::setApplication(Application *app)
{
- m_application = app;
+ m_application = app;
Bad whitespace change.

+ qDebug()
qCDebug please

-void MirSurfaceManager::refreshPromptSessionSurfaces(const Application* application)
+void MirSurfaceManager::refreshPromptSessionSurfaces(Application* application)
No more const pointer? I don't see where we are changing it.

+ qCDebug(QTMIR_SURFACES) << "MirSurfaceManager::rehostPromptSessionSurfaces - remove: " << item->name();
rehost?

Checklist for the MR please. Please use the unity-mir one.

review: Needs Fixing
lp:~nick-dedekind/qtmir/lp1352977 updated
227. By Nick Dedekind

fixed changelog

228. By Nick Dedekind

fixed up some logging

Revision history for this message
Nick Dedekind (nick-dedekind) wrote :

> I can see that this approach works, and is reasonably elegant on the QML side
> for our phone/tablet purposes. But I will ask you to keep in mind the future
> desktop situation where, unlike phone/tablet, surfaces will have child
> surfaces, so an application will build up a tree of surfaces. When that
> situation happens, this separate list approach won't gel at all - I think
> we'll need to add prompt surfaces just as more nodes in that tree (with a
> special "I am a prompt session surface" property attached) and work from
> there.
>
> In fact, I think if we did not have this separation between app surface and
> trust surfaces, then the problem you're addressing here would not exist.

Right, so this is a bit of a hotfix which we can live with for awhile. But it's definately what I wanted to end up with.
Firstly, I think that the trust surfaces should just be siblings of each other, not children with the first being a top level surface. So I've already started to look at putting them linearly (unfortunately it makes messing around with the previous surfaces position in the animations a bit more difficult, but that's unity8 problem.
I'm not sure about having the app surface in the same sector as the prompt surfaces, since it will make the management a bit shifty.

>
> But for now, this approach will do.
>
> + for(MirSurfaceItem* promptSurface : promptSurfaces) {
> nit-pick, space after "for"
>
> + if (surface == m_surface || m_promptSurfaces.contains(surface)) return;
> please move return to the next line
>
> + qDebug()
> use the categorised logging please.
>
> +void Application::removeSurface(MirSurfaceItem* surface)
> add log output here please, is significant enough IMO
> Combining management of app surface and trust helper surfaces bit odd here.
> Think it would be clearer to have 2 methods.

Done.

>
>
> +++ src/modules/Unity/Application/application_manager.cpp
> + m_roleNames.insert(RoleApplication, "application");
> why expose the entire Application object? I don't think it's really necessary.

QML can't work out using out a QVariant(QmlListProperty) if we use the app->promptSurfaces as the role. I'm looking into switching the list into a fully fledged MirSurfaceItemModel (list model which can be used for prompt surfaces, surface children and the surface manager) which will hopefully remove the need to expose the application as a role.

>
> - case RoleFullscreen:
> - return QVariant::fromValue(application->fullscreen());
> Eh? We need this.

doh. fixed.

>
> void MirSurfaceItem::setApplication(Application *app)
> {
> - m_application = app;
> + m_application = app;
> Bad whitespace change.
>
> + qDebug()
> qCDebug please

Done & Done

>
> -void MirSurfaceManager::refreshPromptSessionSurfaces(const Application*
> application)
> +void MirSurfaceManager::refreshPromptSessionSurfaces(Application*
> application)
> No more const pointer? I don't see where we are changing it.

application->addPromptSurface(surface);

>
> + qCDebug(QTMIR_SURFACES) << "MirSurfaceManager::rehostPromptSessionSurfaces -
> remove: " << item->name();
> rehost?

Done.

>
> Checklist for the MR please. Please use the unity-mir one.

lp:~nick-dedekind/qtmir/lp1352977 updated
229. By Nick Dedekind

review comments

Revision history for this message
Nick Dedekind (nick-dedekind) wrote :

> +void Application::removeSurface(MirSurfaceItem* surface)
> add log output here please, is significant enough IMO
> Combining management of app surface and trust helper surfaces bit odd here.
> Think it would be clearer to have 2 methods.
>

Hm. both calling setSurface & addPromptSruface set the application. would have to do this:

if (m_application) {
 m_application->setSurface(nullptr);
}
if (m_application) {
 m_application->removePromptSurface(this);
}

Which i just find a bit weird. I though having removeSurface handling removal or all types of surfaces was lesser of evils.

lp:~nick-dedekind/qtmir/lp1352977 updated
230. By Nick Dedekind

more review comments

Revision history for this message
Gerry Boland (gerboland) wrote :

Code looks ok, but not had chance to test

review: Approve (code)
Revision history for this message
Gerry Boland (gerboland) wrote :

Oh except Checklist please!!

Revision history for this message
Daniel d'Andrada (dandrader) wrote :

109 + Q_PROPERTY(QQmlListProperty<qtmir::MirSurfaceItem> promptSurfaces READ promptSurfaces NOTIFY promptSurfacesChanged DESIGNABLE false)

You should update unity-api accordingly.

review: Needs Fixing
Revision history for this message
Nick Dedekind (nick-dedekind) wrote :

> 109 + Q_PROPERTY(QQmlListProperty<qtmir::MirSurfaceItem> promptSurfaces
> READ promptSurfaces NOTIFY promptSurfacesChanged DESIGNABLE false)
>
> You should update unity-api accordingly.

This can be added later. It's not a requirement for this MP and shouldn't be considered a blocker.

Revision history for this message
Daniel d'Andrada (dandrader) wrote :

> > 109 + Q_PROPERTY(QQmlListProperty<qtmir::MirSurfaceItem> promptSurfaces
> > READ promptSurfaces NOTIFY promptSurfacesChanged DESIGNABLE false)
> >
> > You should update unity-api accordingly.
>
> This can be added later. It's not a requirement for this MP and shouldn't be
> considered a blocker.

That's the right time to add it. Otherwise "later" can very well mean "never".

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2014-08-05 19:23:28 +0000
3+++ debian/changelog 2014-08-08 10:47:06 +0000
4@@ -1,3 +1,10 @@
5+qtmir (0.4.1-0ubuntu1) UNRELEASED; urgency=medium
6+
7+ [ Nick Dedekind ]
8+ * Added prompt surfaces to application
9+
10+ -- Nicholas Dedekind <nicholas.dedekind@gmail.com> Thu, 07 Aug 2014 14:56:41 +0100
11+
12 qtmir (0.4.0+14.10.20140805.1-0ubuntu1) utopic; urgency=low
13
14 [ Nick Dedekind ]
15
16=== modified file 'src/modules/Unity/Application/application.cpp'
17--- src/modules/Unity/Application/application.cpp 2014-07-25 15:29:20 +0000
18+++ src/modules/Unity/Application/application.cpp 2014-08-08 10:47:06 +0000
19@@ -75,6 +75,11 @@
20
21 Application::~Application()
22 {
23+ QList<MirSurfaceItem*> promptSurfaces(m_promptSurfaces);
24+ for (MirSurfaceItem* promptSurface : promptSurfaces) {
25+ delete promptSurface;
26+ }
27+
28 qCDebug(QTMIR_APPLICATIONS) << "Application::~Application";
29 {
30 // In case we get a threaded screenshot callback once the application is deleted.
31@@ -82,8 +87,8 @@
32 m_screenShotGuard.clear();
33 }
34 stopPromptSessions();
35+ delete m_surface;
36 delete m_desktopData;
37- delete m_surface;
38 }
39
40 bool Application::isValid() const
41@@ -480,4 +485,59 @@
42 return false;
43 }
44
45+void Application::addPromptSurface(MirSurfaceItem* surface)
46+{
47+ qCDebug(QTMIR_APPLICATIONS) << "Application::addPromptSurface " << surface->name() << " to " << name();
48+ if (surface == m_surface || m_promptSurfaces.contains(surface))
49+ return;
50+
51+ surface->setApplication(this);
52+ m_promptSurfaces.append(surface);
53+ Q_EMIT promptSurfacesChanged();
54+}
55+
56+void Application::removeSurface(MirSurfaceItem* surface)
57+{
58+ qCDebug(QTMIR_APPLICATIONS) << "Application::removeSurface " << surface->name() << " from " << name();
59+
60+ if (m_surface == surface) {
61+ setSurface(nullptr);
62+ } else if (m_promptSurfaces.contains(surface)) {
63+ m_promptSurfaces.removeAll(surface);
64+ surface->setApplication(nullptr);
65+
66+ Q_EMIT promptSurfacesChanged();
67+ }
68+}
69+
70+void Application::foreachPromptSurface(std::function<void(MirSurfaceItem*)> f) const
71+{
72+ for (MirSurfaceItem* promptSurface : m_promptSurfaces) {
73+ f(promptSurface);
74+ }
75+}
76+
77+QQmlListProperty<MirSurfaceItem> Application::promptSurfaces()
78+{
79+ return QQmlListProperty<MirSurfaceItem>(this,
80+ 0,
81+ Application::promptSurfaceCount,
82+ Application::promptSurfaceAt);
83+}
84+
85+int Application::promptSurfaceCount(QQmlListProperty<MirSurfaceItem> *prop)
86+{
87+ Application *p = qobject_cast<Application*>(prop->object);
88+ return p->m_promptSurfaces.count();
89+}
90+
91+MirSurfaceItem* Application::promptSurfaceAt(QQmlListProperty<MirSurfaceItem> *prop, int index)
92+{
93+ Application *p = qobject_cast<Application*>(prop->object);
94+
95+ if (index < 0 || index >= p->m_promptSurfaces.count())
96+ return nullptr;
97+ return p->m_promptSurfaces[index];
98+}
99+
100 } // namespace qtmir
101
102=== modified file 'src/modules/Unity/Application/application.h'
103--- src/modules/Unity/Application/application.h 2014-07-18 16:29:01 +0000
104+++ src/modules/Unity/Application/application.h 2014-08-08 10:47:06 +0000
105@@ -58,6 +58,7 @@
106 Q_PROPERTY(Stage stage READ stage WRITE setStage NOTIFY stageChanged)
107 Q_PROPERTY(SupportedOrientations supportedOrientations READ supportedOrientations CONSTANT)
108 Q_PROPERTY(MirSurfaceItem* surface READ surface NOTIFY surfaceChanged)
109+ Q_PROPERTY(QQmlListProperty<qtmir::MirSurfaceItem> promptSurfaces READ promptSurfaces NOTIFY promptSurfacesChanged DESIGNABLE false)
110
111 public:
112 Q_DECLARE_FLAGS(Stages, Stage)
113@@ -112,6 +113,10 @@
114
115 bool containsProcess(pid_t pid) const;
116
117+ void foreachPromptSurface(std::function<void(MirSurfaceItem*)> f) const;
118+ void addPromptSurface(MirSurfaceItem* surface);
119+ void removeSurface(MirSurfaceItem* surface);
120+
121 public Q_SLOTS:
122 void suspend();
123 void resume();
124@@ -121,6 +126,7 @@
125 void fullscreenChanged();
126 void stageChanged(Stage stage);
127 void surfaceChanged();
128+ void promptSurfacesChanged();
129
130 void surfaceDestroyed(MirSurfaceItem *surface);
131
132@@ -144,6 +150,10 @@
133
134 void updateFullscreenProperty();
135
136+ QQmlListProperty<MirSurfaceItem> promptSurfaces();
137+ static int promptSurfaceCount(QQmlListProperty<MirSurfaceItem> *prop);
138+ static MirSurfaceItem* promptSurfaceAt(QQmlListProperty<MirSurfaceItem> *prop, int index);
139+
140 ApplicationManager* m_appMgr;
141 QSharedPointer<TaskController> m_taskController;
142 DesktopFileReader* m_desktopData;
143@@ -162,6 +172,7 @@
144 QTimer* m_suspendTimer;
145 SupportedOrientations m_supportedOrientations;
146 MirSurfaceItem *m_surface;
147+ QList<MirSurfaceItem*> m_promptSurfaces;
148 QList<std::shared_ptr<mir::scene::PromptSession>> m_promptSessions;
149 std::shared_ptr<mir::scene::PromptSessionManager> const m_promptSessionManager;
150
151
152=== modified file 'src/modules/Unity/Application/application_manager.cpp'
153--- src/modules/Unity/Application/application_manager.cpp 2014-08-05 10:53:04 +0000
154+++ src/modules/Unity/Application/application_manager.cpp 2014-08-08 10:47:06 +0000
155@@ -213,6 +213,7 @@
156
157 m_roleNames.insert(RoleSurface, "surface");
158 m_roleNames.insert(RoleFullscreen, "fullscreen");
159+ m_roleNames.insert(RoleApplication, "application");
160 }
161
162 ApplicationManager::~ApplicationManager()
163@@ -250,6 +251,8 @@
164 return QVariant::fromValue(application->surface());
165 case RoleFullscreen:
166 return QVariant::fromValue(application->fullscreen());
167+ case RoleApplication:
168+ return QVariant::fromValue(application);
169 default:
170 return QVariant();
171 }
172
173=== modified file 'src/modules/Unity/Application/application_manager.h'
174--- src/modules/Unity/Application/application_manager.h 2014-08-05 10:53:04 +0000
175+++ src/modules/Unity/Application/application_manager.h 2014-08-08 10:47:06 +0000
176@@ -68,6 +68,7 @@
177 enum MoreRoles {
178 RoleSurface = RoleScreenshot+1,
179 RoleFullscreen,
180+ RoleApplication,
181 };
182
183 // Mapping enums to Ubuntu Platform API enums.
184
185=== modified file 'src/modules/Unity/Application/mirsurfaceitem.cpp'
186--- src/modules/Unity/Application/mirsurfaceitem.cpp 2014-07-29 15:01:34 +0000
187+++ src/modules/Unity/Application/mirsurfaceitem.cpp 2014-08-08 10:47:06 +0000
188@@ -312,6 +312,9 @@
189 if (m_parentSurface) {
190 m_parentSurface->removeChildSurface(this);
191 }
192+ if (m_application) {
193+ m_application->removeSurface(this);
194+ }
195
196 qCDebug(QTMIR_SURFACES) << "MirSurfaceItem::~MirSurfaceItem - this=" << this;
197 QMutexLocker locker(&m_mutex);
198@@ -334,7 +337,7 @@
199 }
200
201 if (m_application) {
202- m_application->setSurface(nullptr);
203+ m_application->removeSurface(this);
204 }
205 if (!parent()) {
206 deleteLater();
207@@ -706,7 +709,7 @@
208
209 void MirSurfaceItem::addChildSurface(MirSurfaceItem* surface)
210 {
211- qDebug() << "MirSurfaceItem::addChildSurface " << surface->name() << " to " << name();
212+ qCDebug(QTMIR_SURFACES) << "MirSurfaceItem::addChildSurface " << surface->name() << " to " << name();
213
214 m_children.append(surface);
215 Q_EMIT childSurfacesChanged();
216@@ -714,6 +717,8 @@
217
218 void MirSurfaceItem::removeChildSurface(MirSurfaceItem* surface)
219 {
220+ qCDebug(QTMIR_SURFACES) << "MirSurfaceItem::removeChildSurface " << surface->name() << " from " << name();
221+
222 if (m_children.contains(surface)) {
223 m_children.removeOne(surface);
224
225
226=== modified file 'src/modules/Unity/Application/mirsurfacemanager.cpp'
227--- src/modules/Unity/Application/mirsurfacemanager.cpp 2014-08-01 11:46:30 +0000
228+++ src/modules/Unity/Application/mirsurfacemanager.cpp 2014-08-08 10:47:06 +0000
229@@ -196,8 +196,11 @@
230 }
231
232 void MirSurfaceManager::onPromptProviderAdded(const mir::scene::PromptSession *promptSession,
233- const std::shared_ptr<mir::scene::Session> &)
234+ const std::shared_ptr<mir::scene::Session> &session)
235 {
236+ qCDebug(QTMIR_SURFACES) << "MirSurfaceManager::onPromptProviderAdded - promptSession=" << promptSession
237+ << "session=" << session.get();
238+
239 ApplicationManager* appMgr = static_cast<ApplicationManager*>(ApplicationManager::singleton());
240 Application* application = appMgr->findApplicationWithPromptSession(promptSession);
241
242@@ -205,8 +208,11 @@
243 }
244
245 void MirSurfaceManager::onPromptProviderRemoved(const mir::scene::PromptSession *promptSession,
246- const std::shared_ptr<mir::scene::Session> &)
247+ const std::shared_ptr<mir::scene::Session> &session)
248 {
249+ qCDebug(QTMIR_SURFACES) << "MirSurfaceManager::onPromptProviderRemoved - promptSession=" << promptSession
250+ << "session=" << session.get();
251+
252 ApplicationManager* appMgr = static_cast<ApplicationManager*>(ApplicationManager::singleton());
253 Application* application = appMgr->findApplicationWithPromptSession(promptSession);
254
255@@ -252,12 +258,12 @@
256 return m_surfaceItems[index];
257 }
258
259-void getSurfaceDecendents(MirSurfaceItem* item, QList<MirSurfaceItem*>& surfaceChildren)
260+void appendSurfaceDecendents(MirSurfaceItem* item, QList<MirSurfaceItem*>& surfaceChildren)
261 {
262 // recursive function. fetch all decendent surface items as a list.
263 item->foreachChildSurface([&surfaceChildren](MirSurfaceItem* child) {
264 surfaceChildren.append(child);
265- getSurfaceDecendents(child, surfaceChildren);
266+ appendSurfaceDecendents(child, surfaceChildren);
267 });
268 }
269
270@@ -271,29 +277,32 @@
271 refreshPromptSessionSurfaces(application);
272 }
273
274-void MirSurfaceManager::refreshPromptSessionSurfaces(const Application* application)
275+void MirSurfaceManager::refreshPromptSessionSurfaces(Application* application)
276 {
277 // Re-contruct the child surface heirachy from prompt session providers.
278- // Each provider becomes the parent surface of the next surface,
279- // with the application surface at the top of the heirachy.
280+ // First provider becomes prompt surface of Application, subsequent providers
281+ // becoming the children of the previous provider.
282
283- if (!application)
284+ if (!application) {
285+ qCDebug(QTMIR_SURFACES) << "MirSurfaceManager::refreshPromptSessionSurfaces - No Application for prompt session";
286 return;
287+ }
288 qCDebug(QTMIR_SURFACES) << "MirSurfaceManager::refreshPromptSessionSurfaces - appId=" << application->name();
289
290 std::shared_ptr<ms::PromptSessionManager> manager = m_mirConfig->the_prompt_session_manager();
291
292- MirSurfaceItem* parentItem = application->surface();
293- if (!parentItem) {
294- return;
295- }
296-
297- QList<MirSurfaceItem*> surfaceChildren;
298- getSurfaceDecendents(parentItem, surfaceChildren);
299+ QList<MirSurfaceItem*> surfaces;
300+ application->foreachPromptSurface([&surfaces](MirSurfaceItem* promptSurface) {
301+ surfaces.append(promptSurface);
302+ appendSurfaceDecendents(promptSurface, surfaces);
303+ });
304+ // stop adding providers to the child stack if we come across one which has not yet added a surface.
305 bool continueProviders = true;
306
307 auto refreshFn = [&](const std::shared_ptr<mir::scene::PromptSession>& promptSession) {
308
309+ MirSurfaceItem* parentSurface = nullptr;
310+
311 manager->for_each_provider_in(promptSession,
312 [&](const std::shared_ptr<ms::Session> &session) {
313 QMutexLocker lock(&m_mutex);
314@@ -302,31 +311,39 @@
315 return;
316
317 auto it = m_mirSessionToItemHash.find(session.get());
318- MirSurfaceItem *nextParent = nullptr;
319+ MirSurfaceItem *nextParentSurface = nullptr;
320
321 while (it != m_mirSessionToItemHash.end() && it.key() == session.get()) { // all surfaces for session
322 MirSurfaceItem *surface = it.value();
323- surfaceChildren.removeOne(surface);
324+ surfaces.removeOne(surface);
325
326 if (!surface->isFirstFrameDrawn()) { // only add if the surface is ready.
327 continueProviders = false;
328 break;
329 }
330
331- qCDebug(QTMIR_SURFACES) << "MirSurfaceManager::refreshPromptSessionSurfaces - " << surface->name() << "->setParent(" << parentItem->name() << ")";
332- surface->setParentSurface(parentItem);
333- if (!nextParent)
334- nextParent = surface;
335+ // FIXME - all providers should be "prompt surfaces" of application
336+
337+ // first privder is a application "prompt surface"
338+ if (parentSurface == nullptr) {
339+ surface->setParentSurface(nullptr);
340+ application->addPromptSurface(surface);
341+ // susquent provider is child of previous provider
342+ } else {
343+ surface->setParentSurface(parentSurface);
344+ }
345+ if (!nextParentSurface)
346+ nextParentSurface = surface;
347 ++it;
348 }
349 // first valid session surface is parent of next provider session surface.
350- if (nextParent) {
351- parentItem = nextParent;
352+ if (nextParentSurface) {
353+ parentSurface = nextParentSurface;
354 }
355 });
356
357- for (MirSurfaceItem* item : surfaceChildren) {
358- qCDebug(QTMIR_SURFACES) << "MirSurfaceManager::rehostPromptSessionSurfaces - remove: " << item->name() << " from " << item->parentSurface()->name();
359+ for (MirSurfaceItem* item : surfaces) {
360+ qCDebug(QTMIR_SURFACES) << "MirSurfaceManager::refreshPromptSessionSurfaces - remove: " << item->name();
361 Q_EMIT item->removed();
362 }
363 };
364
365=== modified file 'src/modules/Unity/Application/mirsurfacemanager.h'
366--- src/modules/Unity/Application/mirsurfacemanager.h 2014-07-18 09:44:54 +0000
367+++ src/modules/Unity/Application/mirsurfacemanager.h 2014-08-08 10:47:06 +0000
368@@ -93,7 +93,7 @@
369 );
370
371 void refreshPromptSessionSurfaces(const mir::scene::Session *session);
372- void refreshPromptSessionSurfaces(const Application* application);
373+ void refreshPromptSessionSurfaces(Application* application);
374
375 void removePromptSessionSurface(MirSurfaceItem* surface);
376

Subscribers

People subscribed via source and target branches