@@ -21,6 +21,7 @@
21// qtmirserver
21// qtmirserver
22#include <qtmir/screens.h>
22#include <qtmir/screens.h>
23#include <QGuiApplication>
23#include <QGuiApplication>
26#include <QScreen>
27#include <QScreen>
@@ -34,7 +35,9 @@ Screens::Screens(const QSharedPointer<qtmir::Screens>& model)
34 connect(m_wrapped.data(), &qtmir::Screens::activeScreenChanged, this, &Screens::activeScreenChanged);
35 connect(m_wrapped.data(), &qtmir::Screens::activeScreenChanged, this, &Screens::activeScreenChanged);
36 Q_FOREACH(qtmir::Screen* screen, m_wrapped->screens()) {
37 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);
@@ -125,6 +128,7 @@ void Screens::onScreenAdded(qtmir::Screen *added)
126 beginInsertRows(QModelIndex(), count(), count());
129 beginInsertRows(QModelIndex(), count(), count());
127 auto screenWrapper(new Screen(added));
130 auto screenWrapper(new Screen(added));
131+ QQmlEngine::setObjectOwnership(screenWrapper, QQmlEngine::CppOwnership);
128 m_screens.push_back(screenWrapper);
132 m_screens.push_back(screenWrapper);
129 endInsertRows();
133 endInsertRows();
130 Q_EMIT screenAdded(screenWrapper);
134 Q_EMIT screenAdded(screenWrapper);
@@ -165,13 +169,14 @@ ScreensProxy::ScreensProxy(Screens * const screens)
166 beginInsertRows(QModelIndex(), count(), count());
170 beginInsertRows(QModelIndex(), count(), count());
167 auto screenWrapper(new ScreenProxy(added));
171 auto screenWrapper(new ScreenProxy(added));
172+ QQmlEngine::setObjectOwnership(screenWrapper, QQmlEngine::CppOwnership);
168 m_screens.push_back(screenWrapper);
173 m_screens.push_back(screenWrapper);
169 endInsertRows();
174 endInsertRows();
170 Q_EMIT screenAdded(screenWrapper);
175 Q_EMIT screenAdded(screenWrapper);
171 Q_EMIT countChanged();
176 Q_EMIT countChanged();
174− connect(screens, &Screens::screenAdded, this, [this](Screen *removed) {
179+ connect(screens, &Screens::screenRemoved, this, [this](Screen *removed) {
175 int index = 0;
180 int index = 0;
176 QMutableVectorIterator<Screen*> iter(m_screens);
181 QMutableVectorIterator<Screen*> iter(m_screens);
177 while(iter.hasNext()) {
182 while(iter.hasNext()) {
@@ -193,6 +198,8 @@ ScreensProxy::ScreensProxy(Screens * const screens)
195 Q_FOREACH(Screen* screen, screens->list()) {
200 Q_FOREACH(Screen* screen, screens->list()) {
201+ auto screenWrapper(new ScreenProxy(screen));
202+ QQmlEngine::setObjectOwnership(screenWrapper, QQmlEngine::CppOwnership);
196 m_screens.push_back(new ScreenProxy(screen));
203 m_screens.push_back(new ScreenProxy(screen));