diff options
3 files changed, 17 insertions, 1 deletions
diff --git a/src/plugins/scenegraph/d3d12/qsgd3d12threadedrenderloop.cpp b/src/plugins/scenegraph/d3d12/qsgd3d12threadedrenderloop.cpp index 317471eeec..11cc257103 100644 --- a/src/plugins/scenegraph/d3d12/qsgd3d12threadedrenderloop.cpp +++ b/src/plugins/scenegraph/d3d12/qsgd3d12threadedrenderloop.cpp @@ -773,6 +773,11 @@ void QSGD3D12ThreadedRenderLoop::windowDestroyed(QQuickWindow *window) break; } } + + // Now that we altered the window list, we may need to stop the animation + // timer even if we didn't via handleObscurity. This covers the case where + // we destroy a visible & exposed QQuickWindow. + startOrStopAnimationTimer(); } void QSGD3D12ThreadedRenderLoop::exposureChanged(QQuickWindow *window) diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarethreadedrenderloop.cpp b/src/quick/scenegraph/adaptations/software/qsgsoftwarethreadedrenderloop.cpp index df5ec9b745..8abbefdd48 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarethreadedrenderloop.cpp +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarethreadedrenderloop.cpp @@ -618,6 +618,11 @@ void QSGSoftwareThreadedRenderLoop::windowDestroyed(QQuickWindow *window) break; } } + + // Now that we altered the window list, we may need to stop the animation + // timer even if we didn't via handleObscurity. This covers the case where + // we destroy a visible & exposed QQuickWindow. + startOrStopAnimationTimer(); } void QSGSoftwareThreadedRenderLoop::exposureChanged(QQuickWindow *window) diff --git a/src/quick/scenegraph/qsgthreadedrenderloop.cpp b/src/quick/scenegraph/qsgthreadedrenderloop.cpp index 4543782d5b..cb5e17c71e 100644 --- a/src/quick/scenegraph/qsgthreadedrenderloop.cpp +++ b/src/quick/scenegraph/qsgthreadedrenderloop.cpp @@ -826,13 +826,14 @@ void QSGThreadedRenderLoop::startOrStopAnimationTimer() } if (m_animation_timer != 0 && (exposedWindows == 1 || !m_animation_driver->isRunning())) { + qCDebug(QSG_LOG_RENDERLOOP) << "*** Stopping animation timer"; killTimer(m_animation_timer); m_animation_timer = 0; // If animations are running, make sure we keep on animating if (m_animation_driver->isRunning()) maybePostPolishRequest(const_cast<Window *>(theOne)); - } else if (m_animation_timer == 0 && exposedWindows != 1 && m_animation_driver->isRunning()) { + qCDebug(QSG_LOG_RENDERLOOP) << "*** Starting animation timer"; m_animation_timer = startTimer(qsgrl_animation_interval()); } } @@ -888,6 +889,11 @@ void QSGThreadedRenderLoop::windowDestroyed(QQuickWindow *window) } } + // Now that we altered the window list, we may need to stop the animation + // timer even if we didn't via handleObscurity. This covers the case where + // we destroy a visible & exposed QQuickWindow. + startOrStopAnimationTimer(); + qCDebug(QSG_LOG_RENDERLOOP) << "done windowDestroyed()" << window; } |