From ec00272f749972c49d4eaf858a57c38a5bf30c8b Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Tue, 17 Oct 2017 13:04:47 +0200 Subject: QQuickAnimatorProxyJob: Disconnect from window when unsetting it Otherwise we may get called back when the window's scene graph is ready, but we don't have a controller anymore then. This leads to a crash. Change-Id: I8075619e1fd3c69ca0f7d0b1d72952b8cc5040f8 Reviewed-by: Mitch Curtis Reviewed-by: J-P Nurmi Reviewed-by: Shawn Rutledge --- .../quick/qquickanimations/tst_qquickanimations.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'tests/auto/quick/qquickanimations/tst_qquickanimations.cpp') diff --git a/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp b/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp index fbd6c9c97e..4a7a77416a 100644 --- a/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp +++ b/tests/auto/quick/qquickanimations/tst_qquickanimations.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -103,6 +104,7 @@ private slots: void defaultPropertyWarning(); void pathSvgAnimation(); void pathLineUnspecifiedXYBug(); + void unsetAnimatorProxyJobWindow(); }; #define QTIMED_COMPARE(lhs, rhs) do { \ @@ -1567,6 +1569,22 @@ void tst_qquickanimations::pathLineUnspecifiedXYBug() QCOMPARE(redRect->y(), qreal(0)); } +void tst_qquickanimations::unsetAnimatorProxyJobWindow() +{ + QQuickWindow window; + QQuickItem item(window.contentItem()); + QQuickAbstractAnimation animation(&item); + QAbstractAnimationJob *job = new QAbstractAnimationJob; + QQuickAnimatorProxyJob proxy(job, &animation); + QQuickItem dummy; + item.setParentItem(&dummy); + QSignalSpy spy(&window, SIGNAL(sceneGraphInitialized())); + window.show(); + if (spy.count() < 1) + spy.wait(); + QCOMPARE(proxy.job().data(), job); +} + QTEST_MAIN(tst_qquickanimations) #include "tst_qquickanimations.moc" -- cgit v1.2.3