[outline] Use QScopedPointer for created QML item

According to the documentation the ownership of a QObject created by
QQmlComponent::create is transferred to the caller.

This fixes a crash on KWin tear down.
master
Martin Gräßlin 10 years ago
parent 645e1cf775
commit 0bf9ed5317

@ -126,7 +126,7 @@ CompositedOutlineVisual::CompositedOutlineVisual(Outline *outline)
: OutlineVisual(outline)
, m_qmlContext()
, m_qmlComponent()
, m_mainItem(nullptr)
, m_mainItem()
{
}
@ -136,7 +136,7 @@ CompositedOutlineVisual::~CompositedOutlineVisual()
void CompositedOutlineVisual::hide()
{
if (QQuickWindow *w = qobject_cast<QQuickWindow*>(m_mainItem)) {
if (QQuickWindow *w = qobject_cast<QQuickWindow*>(m_mainItem.data())) {
w->hide();
w->destroy();
}
@ -160,7 +160,7 @@ void CompositedOutlineVisual::show()
if (m_qmlComponent->isError()) {
qDebug() << "Component failed to load: " << m_qmlComponent->errors();
} else {
m_mainItem = m_qmlComponent->create(m_qmlContext.data());
m_mainItem.reset(m_qmlComponent->create(m_qmlContext.data()));
}
}
}

@ -122,7 +122,7 @@ public:
private:
QScopedPointer<QQmlContext> m_qmlContext;
QScopedPointer<QQmlComponent> m_qmlComponent;
QObject *m_mainItem;
QScopedPointer<QObject> m_mainItem;
};
class NonCompositedOutlineVisual : public OutlineVisual

Loading…
Cancel
Save