[Tizen] SetRemoteChildAddress when accessibility is re-activated 17/321317/2 accepted/tizen/7.0/unified/20250320.061615
authorYoungsun Suh <youngsun.suh@samsung.com>
Fri, 14 Mar 2025 04:15:42 +0000 (13:15 +0900)
committerYoungsun Suh <youngsun.suh@samsung.com>
Wed, 19 Mar 2025 01:38:14 +0000 (10:38 +0900)
Change-Id: I7ec1efa192e2f8d14661ce1370934959513f6476

dali-toolkit/internal/controls/web-view/web-view-impl.cpp
dali-toolkit/internal/controls/web-view/web-view-impl.h [changed mode: 0755->0644]

index 6421fb2e4c9f6f532468e5e05f2658d1b8e17460..fa08ab858a6fcda6547f49b711d0918c066b9c3e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -560,9 +560,27 @@ float WebView::GetScaleFactor() const
 
 void WebView::ActivateAccessibility(bool activated)
 {
-  if(mWebEngine)
+  if(!mWebEngine)
   {
-    mWebEngine.ActivateAccessibility(activated);
+    return;
+  }
+
+  DALI_LOG_DEBUG_INFO("ActivateAccessibility requested %d", activated);
+  Actor self = Self();
+  self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN, !activated);
+  mWebEngine.ActivateAccessibility(activated);
+
+  auto accessible = GetAccessibleObject();
+  if(auto webviewAccessible = std::dynamic_pointer_cast<WebViewAccessible>(accessible))
+  {
+    if(!activated)
+    {
+      webviewAccessible->SetForceRefreshAddress(true);
+    }
+    else
+    {
+      webviewAccessible->SetRemoteChildAddress({});
+    }
   }
 }
 
@@ -1407,7 +1425,7 @@ void WebView::WebViewAccessible::UpdateAttributes(Dali::Accessibility::Attribute
 
 void WebView::WebViewAccessible::DoGetChildren(std::vector<Dali::Accessibility::Accessible*>& children)
 {
-  if(!mRemoteChild.GetAddress())
+  if(!mRemoteChild.GetAddress() || mForceRefreshAddress)
   {
     DALI_LOG_DEBUG_INFO("Try setting address as it is not set on initialize");
     SetRemoteChildAddress(mWebEngine.GetAccessibilityAddress());
@@ -1437,6 +1455,7 @@ void WebView::WebViewAccessible::OnAccessibilityEnabled()
 
   mWebEngine.ActivateAccessibility(true);
   SetRemoteChildAddress(mWebEngine.GetAccessibilityAddress());
+  OnChildrenChanged();
 }
 
 void WebView::WebViewAccessible::OnAccessibilityDisabled()
@@ -1453,7 +1472,12 @@ void WebView::WebViewAccessible::OnAccessibilityDisabled()
 void WebView::WebViewAccessible::SetRemoteChildAddress(Dali::Accessibility::Address address)
 {
   mRemoteChild.SetAddress(address);
-  OnChildrenChanged();
+  mForceRefreshAddress = false;
+}
+
+void WebView::WebViewAccessible::SetForceRefreshAddress(bool forceRefresh)
+{
+  mForceRefreshAddress = forceRefresh;
 }
 
 } // namespace Internal
old mode 100755 (executable)
new mode 100644 (file)
index 3acd431..cbeb26c
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_INTERNAL_WEB_VIEW_H
 
 /*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -732,6 +732,10 @@ protected:
 
     WebViewAccessible(Dali::Actor self, Dali::WebEngine& webEngine);
 
+    void SetForceRefreshAddress(bool forceRefresh);
+
+    void SetRemoteChildAddress(Dali::Accessibility::Address address);
+
   protected:
     /**
      * @copydoc Dali::Accessibility::Accessible::UpdateAttributes()
@@ -746,10 +750,10 @@ protected:
   private:
     void OnAccessibilityEnabled();
     void OnAccessibilityDisabled();
-    void SetRemoteChildAddress(Dali::Accessibility::Address address);
 
     Dali::Accessibility::ProxyAccessible mRemoteChild;
     Dali::WebEngine&                     mWebEngine;
+    bool                                 mForceRefreshAddress{false};
   };
 
 private:
@@ -771,8 +775,8 @@ private:
   Dali::Toolkit::WebView::WebViewScreenshotCapturedCallback mScreenshotCapturedCallback;
   Dali::WebEnginePlugin::WebEngineFrameRenderedCallback     mFrameRenderedCallback;
 
-  Vector4 mCornerRadius;                     /// < Corner radius
-  float   mCornerRadiusPolicy;               /// < Corner radius policy
+  Vector4                                                                               mCornerRadius;       /// < Corner radius
+  float                                                                                 mCornerRadiusPolicy; /// < Corner radius policy
   static std::unordered_map<Dali::WebEnginePlugin*, Dali::WeakHandle<Toolkit::WebView>> mPluginWebViewMap;
 };