@@ -28,13 +28,64 @@ MirSurfaceItem::MirSurfaceItem(const QString& name,
2828 , m_type(type)
2929 , m_state(state)
3030 , m_img(screenshot.isLocalFile() ? screenshot.toLocalFile() : screenshot.toString())
31+ , m_parentSurface(nullptr)
3132{
3233 setFillColor(Qt::white);
3334}
3435
36+MirSurfaceItem::~MirSurfaceItem()
37+{
38+ QList<MirSurfaceItem*> children(m_children);
39+ for (MirSurfaceItem* child : children) {
40+ child->setParentSurface(nullptr);
41+ }
42+ if (m_parentSurface)
43+ m_parentSurface->removeChildSurface(this);
44+}
45+
3546void MirSurfaceItem::paint(QPainter * painter)
3647{
3748 if (!m_img.isNull()) {
3849 painter->drawImage(contentsBoundingRect(), m_img, QRect(QPoint(0,0), m_img.size()));
3950 }
4051}
52+
53+void MirSurfaceItem::setParentSurface(MirSurfaceItem* surface)
54+{
55+ if (m_parentSurface == surface || surface == this)
56+ return;
57+
58+ if (m_parentSurface) {
59+ m_parentSurface->removeChildSurface(this);
60+ }
61+
62+ m_parentSurface = surface;
63+
64+ if (m_parentSurface) {
65+ m_parentSurface->addChildSurface(this);
66+ }
67+ Q_EMIT parentSurfaceChanged(surface);
68+}
69+
70+void MirSurfaceItem::removeChildSurface(MirSurfaceItem* surface)
71+{
72+ if (m_children.contains(surface)) {
73+ m_children.removeOne(surface);
74+ Q_EMIT childSurfacesChanged();
75+ }
76+}
77+
78+void MirSurfaceItem::addChildSurface(MirSurfaceItem* surface)
79+{
80+ m_children.append(surface);
81+ Q_EMIT childSurfacesChanged();
82+}
83+
84+QList<QObject*> MirSurfaceItem::childSurfaces() const
85+{
86+ QList<QObject*> children;
87+ for(MirSurfaceItem* child : m_children) {
88+ children.append(child);
89+ }
90+ return children;
91+}