Relayout only if the actor is on Scene 66/273966/1
authorHeeyong Song <heeyong.song@samsung.com>
Tue, 19 Apr 2022 05:17:54 +0000 (14:17 +0900)
committerHeeyong Song <heeyong.song@samsung.com>
Tue, 19 Apr 2022 05:17:54 +0000 (14:17 +0900)
We're already checking whether the actor is on scene in RelayoutController::Relayout() before it is added to the mRelayoutStack.
But there is a case that the actor is removed from the scene in the previous OnRelayout.
So check whether the actor is on scene again.

Change-Id: Ia2b64e7f39f24d67b65b9689c720a7ef359d54fd

dali/internal/event/size-negotiation/relayout-controller-impl.cpp

index fbf0411..497f515 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -446,7 +446,7 @@ void RelayoutController::Relayout()
         Actor& actorImpl = GetImplementation(actor);
         mRelayoutStack->PopBack();
 
-        if(actorImpl.RelayoutRequired())
+        if(actorImpl.RelayoutRequired() && actorImpl.OnScene())
         {
           DALI_LOG_INFO(gLogFilter, Debug::General, "[Internal::RelayoutController::Relayout] Negotiating %p %s %s (%.2f, %.2f)\n", &actorImpl, actor.GetTypeName().c_str(), actor.GetProperty<std::string>(Dali::Actor::Property::NAME).c_str(), size.width, size.height);