(A11y) Create Accessible at Detach() only if we use it before. 07/301107/7
authorEunki, Hong <eunkiki.hong@samsung.com>
Wed, 8 Nov 2023 13:26:12 +0000 (22:26 +0900)
committerEunki Hong <eunkiki.hong@samsung.com>
Tue, 14 Nov 2023 17:21:54 +0000 (02:21 +0900)
Detach() API called at Dispose() timing. So we don't need to re-create
Accessible that timing if we never use Accessible item previously.

This patch have dependency with below pathces :

https://review.tizen.org/gerrit/c/platform/core/uifw/dali-toolkit/+/301106

Change-Id: I55b40951ec792c52c82b53e3746c2a876e52dbe3
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali-csharp-binder/common/nui-view-accessible.cpp

index 58e8d2b7e9d568d4e5f5cad5c274058fd14ac18a..af4d32d26376323fe6b4644909557a81428d5a9c 100644 (file)
@@ -738,12 +738,23 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_DetachAccessibleObject(Dal
   GUARD_ON_NULL_RET(arg1_control);
 
   try_catch(([&]() {
-    auto* actorAccessible = Dali::Accessibility::Accessible::Get(*arg1_control);
-    auto* viewAccessible  = dynamic_cast<NUIViewAccessible*>(actorAccessible);
-
-    if(viewAccessible)
+    Dali::Toolkit::Control control = *arg1_control;
+    if(DALI_LIKELY(control))
     {
-      viewAccessible->Detach();
+      // 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);
+
+        if(viewAccessible)
+        {
+          viewAccessible->Detach();
+        }
+      }
+
+      // Make that we will not create new NUIViewAccessible anymore.
+      DevelControl::EnableCreateAccessible(control, false);
     }
   }));
 }