@@ -32,7 +32,6 @@ MirSurface::MirSurface(const QString& name,
32 , m_qmlFilePath(qmlFilePath)
32 , m_qmlFilePath(qmlFilePath)
33 , m_live(true)
33 , m_live(true)
34 , m_visible(true)
34 , m_visible(true)
36 , m_activeFocus(false)
35 , m_activeFocus(false)
37 , m_width(-1)
36 , m_width(-1)
38 , m_height(-1)
37 , m_height(-1)
@@ -88,7 +87,7 @@ void MirSurface::setLive(bool live)
88 m_live = live;
87 m_live = live;
89 Q_EMIT liveChanged(live);
88 Q_EMIT liveChanged(live);
91− if (!m_live && m_viewCount == 0) {
90+ if (!m_live && m_views.count() == 0) {
92 deleteLater();
91 deleteLater();
@@ -126,27 +125,49 @@ void MirSurface::setOrientationAngle(Mir::OrientationAngle angle)
126 Q_EMIT orientationAngleChanged(angle);
125 Q_EMIT orientationAngleChanged(angle);
129−void MirSurface::incrementViewCount()
128+
130+void MirSurface::registerView(qintptr viewId)
131− ++m_viewCount;
132+ m_views.insert(viewId, MirSurface::View{false});
132−// qDebug().nospace() << "MirSurface::incrementViewCount() viewCount(after)=" << m_viewCount << " " << name();
133+ qDebug().nospace() << "MirSurface[" << name() << "]::registerView(" << viewId << ")"
134+ << " after=" << m_views.count();
135−void MirSurface::decrementViewCount()
137+void MirSurface::unregisterView(qintptr viewId)
137− --m_viewCount;
139+ qDebug().nospace() << "MirSurface[" << name() << "]::unregisterView(" << viewId << ")"
138−// qDebug().nospace() << "MirSurface::decrementViewCount() viewCount(after)=" << m_viewCount << " " << name();
140+ << " after=" << m_views.count() << " live=" << m_live;
139−
141+ m_views.remove(viewId);
140− Q_ASSERT(m_viewCount >= 0);
142− if (!m_live && m_viewCount == 0) {
142+ if (!m_live && m_views.count() == 0) {
143 deleteLater();
143 deleteLater();
147−int MirSurface::viewCount() const
148+void MirSurface::setViewVisibility(qintptr viewId, bool visible)
149− return m_viewCount;
150+ if (!m_views.contains(viewId)) return;
152+ m_views[viewId].visible = visible;
156+void MirSurface::updateVisibility()
158+ bool newVisible = false;
159+ QHashIterator<qintptr, View> i(m_views);
160+ while (i.hasNext()) {
162+ newVisible |= i.value().visible;
165+ if (newVisible != visible()) {
166+// qDebug().nospace() << "MirSurface[" << name() << "]::updateVisibility(" << newVisible << ")";
168+ m_visible = newVisible;
169+ Q_EMIT visibleChanged(m_visible);
152bool MirSurface::activeFocus() const
173bool MirSurface::activeFocus() const
@@ -164,18 +185,6 @@ void MirSurface::setActiveFocus(bool value)
164 Q_EMIT activeFocusChanged(value);
185 Q_EMIT activeFocusChanged(value);
167−void MirSurface::setVisible(bool visible)
169− qDebug() << "MirSurface::setVisible(visible=" << visible << ")";
171− if (m_visible == visible)
174− m_visible = visible;
176− Q_EMIT visibleChanged(m_visible);
179int MirSurface::width() const
188int MirSurface::width() const
181 return m_width;
190 return m_width;