[Tizen] Fix GetNavigableAtPoint when the embedded widget has no accessibile object 12/316212/3
authorYoungsun Suh <youngsun.suh@samsung.com>
Fri, 16 Aug 2024 04:00:30 +0000 (13:00 +0900)
committerYoungsun Suh <youngsun.suh@samsung.com>
Fri, 16 Aug 2024 04:07:57 +0000 (13:07 +0900)
Change-Id: I690114db34985912c996b9e9a8b2c8196011bc3e

dali/internal/accessibility/bridge/bridge-accessible.cpp

index 139e97d..0a8903c 100644 (file)
@@ -168,13 +168,16 @@ static bool IsVisibleInScrollableParent(Accessible* accessible)
 {
   auto scrollableParent = GetScrollableParent(accessible);
 
-  if (scrollableParent == nullptr) return true;
+  if(scrollableParent == nullptr)
+  {
+    return true;
+  }
 
   auto scrollableParentExtents = scrollableParent->GetExtents(CoordinateType::WINDOW);
 
   auto component = dynamic_cast<Component*>(accessible);
 
-  if (component && !scrollableParentExtents.Intersects(component->GetExtents(CoordinateType::WINDOW)))
+  if(component && !scrollableParentExtents.Intersects(component->GetExtents(CoordinateType::WINDOW)))
   {
     return false;
   }
@@ -182,7 +185,7 @@ static bool IsVisibleInScrollableParent(Accessible* accessible)
   return true;
 }
 
-static bool IsChildVisibleInScrollableParent(Accessible *start, Accessible *accessible)
+static bool IsChildVisibleInScrollableParent(Accessible* start, Accessible* accessible)
 {
   return IsVisibleInScrollableParent(start) || IsVisibleInScrollableParent(accessible);
 }
@@ -499,7 +502,7 @@ Component* BridgeAccessible::CalculateNavigableAccessibleAtPoint(Accessible* roo
 
     if(controledBy->IsProxy() || IsObjectAcceptable(controledBy))
     {
-      LOG() << "CalculateNavigableAccessibleAtPoint: found:    " << MakeIndent(maxRecursionDepth) << GetComponentInfo(rootComponent);
+      LOG() << "CalculateNavigableAccessibleAtPoint: found:    " << MakeIndent(maxRecursionDepth) << GetComponentInfo(rootComponent) << " " << controledBy->IsProxy();
       return controledBy;
     }
   }
@@ -701,10 +704,19 @@ DBus::ValueOrError<Accessible*, uint8_t, Accessible*> BridgeAccessible::GetNavig
   if(component)
   {
     recurse = component->IsProxy();
-    if (recurse)
+    if(recurse)
     {
       Accessible* parent = component->GetParent();
-      deputy = IsObjectAcceptable(parent) ? parent : nullptr;
+      while(parent && parent != accessible && !deputy)
+      {
+        if(IsObjectAcceptable(parent))
+        {
+          deputy = parent;
+          LOG() << "deputy:    " << GetComponentInfo(dynamic_cast<Component*>(deputy));
+          break;
+        }
+        parent = parent->GetParent();
+      }
     }
   }
   return {component, recurse, deputy};