@@ -21,6 +21,7 @@
2121// qtmirserver
2222#include <qtmir/screens.h>
2323#include <QGuiApplication>
24+#include <QQmlEngine>
2425
2526// Qt
2627#include <QScreen>
@@ -34,7 +35,9 @@ Screens::Screens(const QSharedPointer<qtmir::Screens>& model)
3435 connect(m_wrapped.data(), &qtmir::Screens::activeScreenChanged, this, &Screens::activeScreenChanged);
3536
3637 Q_FOREACH(qtmir::Screen* screen, m_wrapped->screens()) {
37− m_screens.push_back(new Screen(screen));
38+ auto screenWrapper(new Screen(screen));
39+ QQmlEngine::setObjectOwnership(screenWrapper, QQmlEngine::CppOwnership);
40+ m_screens.push_back(screenWrapper);
3841 }
3942}
4043
@@ -125,6 +128,7 @@ void Screens::onScreenAdded(qtmir::Screen *added)
125128
126129 beginInsertRows(QModelIndex(), count(), count());
127130 auto screenWrapper(new Screen(added));
131+ QQmlEngine::setObjectOwnership(screenWrapper, QQmlEngine::CppOwnership);
128132 m_screens.push_back(screenWrapper);
129133 endInsertRows();
130134 Q_EMIT screenAdded(screenWrapper);
@@ -165,13 +169,14 @@ ScreensProxy::ScreensProxy(Screens * const screens)
165169
166170 beginInsertRows(QModelIndex(), count(), count());
167171 auto screenWrapper(new ScreenProxy(added));
172+ QQmlEngine::setObjectOwnership(screenWrapper, QQmlEngine::CppOwnership);
168173 m_screens.push_back(screenWrapper);
169174 endInsertRows();
170175 Q_EMIT screenAdded(screenWrapper);
171176 Q_EMIT countChanged();
172177 });
173178
174− connect(screens, &Screens::screenAdded, this, [this](Screen *removed) {
179+ connect(screens, &Screens::screenRemoved, this, [this](Screen *removed) {
175180 int index = 0;
176181 QMutableVectorIterator<Screen*> iter(m_screens);
177182 while(iter.hasNext()) {
@@ -193,6 +198,8 @@ ScreensProxy::ScreensProxy(Screens * const screens)
193198 });
194199
195200 Q_FOREACH(Screen* screen, screens->list()) {
201+ auto screenWrapper(new ScreenProxy(screen));
202+ QQmlEngine::setObjectOwnership(screenWrapper, QQmlEngine::CppOwnership);
196203 m_screens.push_back(new ScreenProxy(screen));
197204 }
198205}