diff options
author | Jere Tuliniemi <jere.tuliniemi@qt.io> | 2019-11-06 14:34:21 +0200 |
---|---|---|
committer | Jere Tuliniemi <jere.tuliniemi@qt.io> | 2019-11-07 08:49:39 +0200 |
commit | 9a0e1781f89895549f7dc7d3206a1406aafd0c1f (patch) | |
tree | cb138207a2b8b1480bd9734e0069581fdedad7a4 | |
parent | 3e803a3ff7db5ccd5085533d094fbca3732b0f52 (diff) |
Fix component behavior when the parent group is inactive
Call GoToSlideIndex upon activation if a slide change has been queued
for an inactive component.
Task-number: QT3DS-3997
Change-Id: I63489cd438428546b04883d04ee5d40b04e1cb78
Reviewed-by: Antti Määttä <antti.maatta@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r-- | src/runtime/Qt3DSActivationManager.cpp | 3 | ||||
-rw-r--r-- | src/runtime/Qt3DSComponentManager.cpp | 5 | ||||
-rw-r--r-- | src/runtime/Qt3DSComponentManager.h | 1 | ||||
-rw-r--r-- | src/runtime/Qt3DSIComponentManager.h | 1 |
4 files changed, 9 insertions, 1 deletions
diff --git a/src/runtime/Qt3DSActivationManager.cpp b/src/runtime/Qt3DSActivationManager.cpp index cf14820..6d35f4d 100644 --- a/src/runtime/Qt3DSActivationManager.cpp +++ b/src/runtime/Qt3DSActivationManager.cpp @@ -683,7 +683,8 @@ struct STimeContext Mutex::ScopedLock __locker(m_ElementAccessMutex); // When the component is activated the first time go to the first slide // Subsequent activations should continue from the deactivated slide - if (theContextNode.GetCurrentSlide() == 0) { + if (theContextNode.GetCurrentSlide() == 0 + || inComponentManager.hasSlideChangeQueued(&theContextNode)) { inComponentManager.GotoSlideIndex(&theContextNode, 1, false); inComponentManager.applyQueuedChanges(&theContextNode); } diff --git a/src/runtime/Qt3DSComponentManager.cpp b/src/runtime/Qt3DSComponentManager.cpp index 184576f..8f33ec8 100644 --- a/src/runtime/Qt3DSComponentManager.cpp +++ b/src/runtime/Qt3DSComponentManager.cpp @@ -340,6 +340,11 @@ void CComponentManager::queueChange(TElement *component, TElement *target, const } } +bool CComponentManager::hasSlideChangeQueued(TElement *component) +{ + return m_ComponentInitialSlideMap.find(component) != m_ComponentInitialSlideMap.end(); +} + //============================================================================== /** * Performs a switch to the previous slide. diff --git a/src/runtime/Qt3DSComponentManager.h b/src/runtime/Qt3DSComponentManager.h index 108640b..6ede073 100644 --- a/src/runtime/Qt3DSComponentManager.h +++ b/src/runtime/Qt3DSComponentManager.h @@ -94,6 +94,7 @@ public: // Slide void applyQueuedChanges(TElement *component) override; void queueChange(TElement *component, TElement *target, const char *attName, const char *value) override; + bool hasSlideChangeQueued(TElement *component) override; UINT8 GetSlideCount(TElement *inComponent) override; UINT8 GetCurrentSlide(TElement *inComponent) override; diff --git a/src/runtime/Qt3DSIComponentManager.h b/src/runtime/Qt3DSIComponentManager.h index be94f7e..50afe05 100644 --- a/src/runtime/Qt3DSIComponentManager.h +++ b/src/runtime/Qt3DSIComponentManager.h @@ -123,6 +123,7 @@ public: // Slides virtual void applyQueuedChanges(TElement *component) = 0; virtual void queueChange(TElement *component, TElement *target, const char *attName, const char *value) = 0; + virtual bool hasSlideChangeQueued(TElement *component) = 0; virtual void OnElementDeactivated(TElement *inElement) = 0; |