aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickrendercontrol.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/items/qquickrendercontrol.cpp')
-rw-r--r--src/quick/items/qquickrendercontrol.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/quick/items/qquickrendercontrol.cpp b/src/quick/items/qquickrendercontrol.cpp
index cc4cec443a..d00b02c005 100644
--- a/src/quick/items/qquickrendercontrol.cpp
+++ b/src/quick/items/qquickrendercontrol.cpp
@@ -129,11 +129,6 @@ QQuickRenderControlPrivate::QQuickRenderControlPrivate()
rc = new QSGRenderContext(sg);
}
-QQuickRenderControlPrivate::~QQuickRenderControlPrivate()
-{
- delete rc;
-}
-
void QQuickRenderControlPrivate::cleanup()
{
delete sg;
@@ -162,13 +157,25 @@ QQuickRenderControl::~QQuickRenderControl()
if (d->window)
QQuickWindowPrivate::get(d->window)->renderControl = 0;
+
+ // It is likely that the cleanup in windowDestroyed() is not called since
+ // the standard pattern is to destroy the rendercontrol before the QQuickWindow.
+ // Do it here.
+ d->windowDestroyed();
+
+ delete d->rc;
}
void QQuickRenderControlPrivate::windowDestroyed()
{
- if (window == 0) {
+ if (window) {
rc->invalidate();
QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);
+
+ delete QQuickWindowPrivate::get(window)->animationController;
+ QQuickWindowPrivate::get(window)->animationController = 0;
+
+ window = 0;
}
}