Disconnect DevelWindow::VisibilityChangedSignal when off scene 69/309869/2
authorSeungho Baek <sbsh.baek@samsung.com>
Wed, 17 Apr 2024 12:49:57 +0000 (21:49 +0900)
committerSeungho Baek <sbsh.baek@samsung.com>
Thu, 18 Apr 2024 02:32:55 +0000 (11:32 +0900)
Change-Id: I7053a6c4b1e589de5c803bf41cb7118fffdd4bfc
Signed-off-by: Seungho Baek <sbsh.baek@samsung.com>
dali-extension/internal/rive-animation-view/rive-animation-view-impl.cpp
dali-extension/internal/rive-animation-view/rive-animation-view-impl.h

index 83c5f89..eeb4cc6 100644 (file)
@@ -171,6 +171,7 @@ void RiveAnimationView::OnSceneConnection(int depth)
     Window window = DevelWindow::Get(actor);
     if(window)
     {
+      mPlacementWindow = window;
       DevelWindow::VisibilityChangedSignal(window).Connect(this, &RiveAnimationView::OnWindowVisibilityChanged);
     }
   }
@@ -200,10 +201,11 @@ void RiveAnimationView::OnSceneDisconnection()
 
   DevelActor::VisibilityChangedSignal(actor).Disconnect(this, &RiveAnimationView::OnControlVisibilityChanged);
 
-  Window window = DevelWindow::Get(actor);
+  Window window = mPlacementWindow.GetHandle();
   if(window)
   {
     DevelWindow::VisibilityChangedSignal(window).Disconnect(this, &RiveAnimationView::OnWindowVisibilityChanged);
+    mPlacementWindow.Reset();
   }
 
   // Reset the visual size to zero so that when adding the actor back to stage the rasterization is forced
index ea98541..c4aea3e 100644 (file)
  */
 
 // EXTERNAL INCLUDES
+#include <dali-toolkit/public-api/controls/control-impl.h>
 #include <dali/devel-api/actors/actor-devel.h>
 #include <dali/public-api/adaptor-framework/window.h>
 #include <dali/public-api/object/property-notification.h>
-#include <dali-toolkit/public-api/controls/control-impl.h>
+#include <dali/public-api/object/weak-handle.h>
 
 // INTERNAL INCLUDES
 #include <dali-extension/devel-api/rive-animation-view/rive-animation-view.h>
@@ -267,6 +268,7 @@ private:
   RiveAnimationView& operator=(const RiveAnimationView&);
 
 private:
+  WeakHandle<Window>                                      mPlacementWindow;
   std::string                                             mUrl{};
   RiveAnimationTask::AnimationData                        mAnimationData{};
   RiveAnimationTaskPtr                                    mRiveAnimationTask{};