Reorder node's children only required case.
[platform/core/uifw/dali-core.git] / dali / internal / update / manager / scene-graph-frame-callback.cpp
index 924e7e9..1f8aa62 100644 (file)
@@ -40,15 +40,10 @@ FrameCallback::~FrameCallback()
   if(mUpdateProxy)
   {
     mUpdateProxy->GetRootNode().RemoveObserver(*this);
+    mUpdateProxy->AddNodeResetters();
   }
 
-  {
-    Mutex::ScopedLock lock(mMutex);
-    if(mFrameCallbackInterface)
-    {
-      FrameCallbackInterface::Impl::Get(*mFrameCallbackInterface).DisconnectFromSceneGraphObject();
-    }
-  }
+  Invalidate();
 }
 
 void FrameCallback::ConnectToSceneGraph(UpdateManager& updateManager, TransformManager& transformManager, Node& rootNode)
@@ -70,7 +65,7 @@ bool FrameCallback::Update(BufferIndex bufferIndex, float elapsedSeconds, bool n
     }
 
     Mutex::ScopedLock lock(mMutex);
-    if(mFrameCallbackInterface)
+    if(mFrameCallbackInterface && mValid)
     {
       Dali::UpdateProxy updateProxy(*mUpdateProxy);
       mFrameCallbackInterface->Update(updateProxy, elapsedSeconds);
@@ -83,10 +78,11 @@ bool FrameCallback::Update(BufferIndex bufferIndex, float elapsedSeconds, bool n
 void FrameCallback::Invalidate()
 {
   Mutex::ScopedLock lock(mMutex);
-  if(mFrameCallbackInterface)
+  if(mFrameCallbackInterface && mValid)
   {
     FrameCallbackInterface::Impl::Get(*mFrameCallbackInterface).DisconnectFromSceneGraphObject();
-    mFrameCallbackInterface = nullptr;
+    mValid = false;
+    // Do not set mFrameCallbackInterface to nullptr as it is used for comparison checks by the comparison operator
   }
 }