summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJere Tuliniemi <jere.tuliniemi@qt.io>2019-11-06 14:34:21 +0200
committerJere Tuliniemi <jere.tuliniemi@qt.io>2019-11-07 08:49:39 +0200
commit9a0e1781f89895549f7dc7d3206a1406aafd0c1f (patch)
treecb138207a2b8b1480bd9734e0069581fdedad7a4
parent3e803a3ff7db5ccd5085533d094fbca3732b0f52 (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.cpp3
-rw-r--r--src/runtime/Qt3DSComponentManager.cpp5
-rw-r--r--src/runtime/Qt3DSComponentManager.h1
-rw-r--r--src/runtime/Qt3DSIComponentManager.h1
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;