[Tizen] Revert "Revert "[Tizen] Backport accessible lifecycle refactoring"" 04/319104/1 accepted/tizen_7.0_unified tizen_7.0 accepted/tizen/7.0/unified/20241017.161245
authorYoungsun Suh <youngsun.suh@samsung.com>
Tue, 15 Oct 2024 07:55:15 +0000 (16:55 +0900)
committerYoungsun Suh <youngsun.suh@samsung.com>
Tue, 15 Oct 2024 08:01:42 +0000 (17:01 +0900)
This reverts commit 11dee7c1aa7eebb4a1c13efbd6d0b874f55787cc.
+ with crash fix when a11y is disabled

Change-Id: I8d753cc860358c708a49aef71db424733e218532

dali-csharp-binder/src/control-devel-wrap.cpp
dali-csharp-binder/src/nui-view-accessible.cpp

index 14a63de..dd8821f 100644 (file)
@@ -28,6 +28,7 @@
 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-signals-devel.h>
 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
 #include <dali/devel-api/adaptor-framework/vector-animation-renderer.h>
+#include <dali/devel-api/atspi-interfaces/accessible.h>
 #include <string>
 
 using namespace Dali;
@@ -275,7 +276,10 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_SetReadingInfoTypes(Dali::
   GUARD_ON_NULL_RET(arg1_actor);
   try_catch(([&]() {
     ReadingInfoTypes readingInfoTypes(static_cast<std::uint32_t>(arg2));
-    Accessible::Get(*arg1_actor)->SetReadingInfoTypes(readingInfoTypes);
+    if(auto accessible = Accessible::Get(*arg1_actor))
+    {
+      accessible->SetReadingInfoTypes(readingInfoTypes);
+    }
   }));
 }
 
@@ -286,8 +290,11 @@ SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Accessibility_GetReadingInfoTypes(Dali::A
   int result = 0;
   GUARD_ON_NULL_RET0(arg1_actor);
   try_catch(([&]() {
-    ReadingInfoTypes readingInfoTypes = Accessible::Get(*arg1_actor)->GetReadingInfoTypes();
-    result = static_cast<int>(readingInfoTypes.GetRawData()[0]);
+    if(auto accessible = Accessible::Get(*arg1_actor))
+    {
+      ReadingInfoTypes readingInfoTypes = accessible->GetReadingInfoTypes();
+      result = static_cast<int>(readingInfoTypes.GetRawData()[0]);
+    }
   }));
   return result;
 }
@@ -473,7 +480,7 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_Bridge_RegisterDefaultLabe
   GUARD_ON_NULL_RET(arg1_actor);
   try_catch(([&]() {
     Dali::Actor* actor      = (Dali::Actor*)arg1_actor;
-    auto         accessible = Dali::Accessibility::Accessible::Get(*actor);
+    auto         accessible = Dali::Accessibility::Accessible::GetOwningPtr(*actor);
     auto         bridge     = Dali::Accessibility::Bridge::GetCurrentBridge();
 
     if(!accessible)
@@ -491,7 +498,7 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_Bridge_UnregisterDefaultLa
   GUARD_ON_NULL_RET(arg1_actor);
   try_catch(([&]() {
     Dali::Actor* actor      = (Dali::Actor*)arg1_actor;
-    auto         accessible = Dali::Accessibility::Accessible::Get(*actor);
+    auto         accessible = Dali::Accessibility::Accessible::GetOwningPtr(*actor);
     auto         bridge     = Dali::Accessibility::Bridge::GetCurrentBridge();
 
     if(!accessible)
index adcd8b7..962d8a1 100644 (file)
@@ -20,6 +20,7 @@
 
 // EXTERNAL INCLUDES
 #include <dali/integration-api/debug.h>
+#include <dali/devel-api/atspi-interfaces/accessible.h>
 
 // INTERNAL INCLUDES
 #include "control-devel-wrap.h"
@@ -757,8 +758,8 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_DetachAccessibleObject(Dal
       // Call detach only if accessible was created before.
       if(DevelControl::IsAccessibleCreated(control))
       {
-        auto* actorAccessible = Dali::Accessibility::Accessible::Get(control);
-        auto* viewAccessible  = dynamic_cast<NUIViewAccessible*>(actorAccessible);
+        auto actorAccessible = Dali::Accessibility::Accessible::GetOwningPtr(control);
+        auto viewAccessible  = std::dynamic_pointer_cast<NUIViewAccessible>(actorAccessible);
 
         if(viewAccessible)
         {