summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/runtime/Qt3DSComponentManager.cpp11
-rw-r--r--src/runtime/Qt3DSElementSystem.h20
2 files changed, 25 insertions, 6 deletions
diff --git a/src/runtime/Qt3DSComponentManager.cpp b/src/runtime/Qt3DSComponentManager.cpp
index f20176b..68e6ecd 100644
--- a/src/runtime/Qt3DSComponentManager.cpp
+++ b/src/runtime/Qt3DSComponentManager.cpp
@@ -85,12 +85,11 @@ void CComponentManager::GotoSlideIndex(TElement *inComponent,
return;
}
- if (!theComponent->IsAnyParentAboutToActivate()) {
- if (!theComponent->GetActive() || theComponent->AboutToDeactivate()) {
- // When (becoming) not active, don't proceed slide switching
- m_ComponentInitialSlideMap[inComponent] = inGotoData;
- return;
- }
+ if (!theComponent->GetActive() || !theComponent->IsExplicitActive()
+ || !theComponent->areAllParentsActive()) {
+ // When (becoming) not active, don't proceed slide switching
+ m_ComponentInitialSlideMap[inComponent] = inGotoData;
+ return;
}
SComponentGotoSlideData theGotoSlideData(inGotoData);
diff --git a/src/runtime/Qt3DSElementSystem.h b/src/runtime/Qt3DSElementSystem.h
index 22cf66c..2632d9d 100644
--- a/src/runtime/Qt3DSElementSystem.h
+++ b/src/runtime/Qt3DSElementSystem.h
@@ -477,6 +477,26 @@ namespace runtime {
return !IsExplicitActive();
}
+ bool areAllParentsActive()
+ {
+ SElement *parent = GetParent();
+ if (parent) {
+ bool isActive = parent->GetActive();
+ if (!isActive)
+ isActive = parent->AboutToActivate();
+ if (Depth() > 2) {
+ if (isActive)
+ isActive = parent->areAllParentsActive();
+ } else {
+ return true;
+ }
+ return isActive;
+ } else {
+ return true;
+ }
+ return false;
+ }
+
bool IsAnyParentAboutToActivate()
{
SElement *parent = GetParent();