summaryrefslogtreecommitdiffstats
path: root/src/render/frontend/qrendersettings.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2016-05-20 17:11:37 +0200
committerSean Harmer <sean.harmer@kdab.com>2016-05-23 16:31:55 +0000
commit073930f2ef030b3019c323999d910185f4639d9b (patch)
tree0c2bba252f7a92d4f3841fbe42eeca27e2a8a838 /src/render/frontend/qrendersettings.cpp
parent15dace7c02bc5acdf02f94c8be08fec1a792383c (diff)
Shared node bookkeeping
Any time a property references a QNode there is a risk that the node gets destroyed and then the property is left pointing to a dangling pointer. To handle such cases, setters of such properties are able to use a helper that internally connect QObject::destroyed signal to a setter removal method. Change-Id: I42428c851d0e3d2d88ab0cf6a5b75605334ec648 Task-number: QTBUG-53456 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/frontend/qrendersettings.cpp')
-rw-r--r--src/render/frontend/qrendersettings.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/render/frontend/qrendersettings.cpp b/src/render/frontend/qrendersettings.cpp
index a6e4a99eb..b0a409275 100644
--- a/src/render/frontend/qrendersettings.cpp
+++ b/src/render/frontend/qrendersettings.cpp
@@ -110,9 +110,18 @@ void QRenderSettings::setActiveFrameGraph(QFrameGraphNode *activeFrameGraph)
if (d->m_activeFrameGraph == activeFrameGraph)
return;
+ if (d->m_activeFrameGraph)
+ d->unregisterDestructionHelper(d->m_activeFrameGraph);
+
if (activeFrameGraph != nullptr && !activeFrameGraph->parent())
activeFrameGraph->setParent(this);
+
d->m_activeFrameGraph = activeFrameGraph;
+
+ // Ensures proper bookkeeping
+ if (d->m_activeFrameGraph)
+ d->registerDestructionHelper(d->m_activeFrameGraph, &QRenderSettings::setActiveFrameGraph, d->m_activeFrameGraph);
+
emit activeFrameGraphChanged(activeFrameGraph);
}