Revert "[Tizen] Reverts the patch that prevents focus set when parent is visible...
authorSeoyeon Kim <seoyeon2.kim@samsung.com>
Fri, 27 May 2022 02:14:01 +0000 (11:14 +0900)
committerSeoyeon Kim <seoyeon2.kim@samsung.com>
Fri, 27 May 2022 02:14:01 +0000 (11:14 +0900)
This reverts commit 39c410d5e3a1fa8ac8f67ca953cae35ba1781d63.

automated-tests/src/dali-toolkit/utc-Dali-KeyboardFocusManager.cpp
dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp

index ccab3e0..9a40691 100644 (file)
@@ -2309,6 +2309,49 @@ int UtcDaliKeyboardFocusManagerWithHide(void)
   END_TEST;
 }
 
+int UtcDaliKeyboardFocusManagerWithVisible(void)
+{
+  ToolkitTestApplication application;
+
+  tet_infoline(" UtcDaliKeyboardFocusManagerWithVisible");
+
+  KeyboardFocusManager manager = KeyboardFocusManager::Get();
+  DALI_TEST_CHECK(manager);
+
+  // Create the first actor and add it to the stage
+  Actor first = Actor::New();
+  first.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
+  application.GetScene().Add(first);
+
+  // Create the second actor and add it to the first actor.
+  Actor second = Actor::New();
+  second.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
+  first.Add(second);
+
+  // Check that no actor is being focused yet.
+  DALI_TEST_CHECK(manager.GetCurrentFocusActor() == Actor());
+
+  // Check that the focus is set on the first actor
+  DALI_TEST_CHECK(manager.SetCurrentFocusActor(first) == true);
+  DALI_TEST_CHECK(manager.GetCurrentFocusActor() == first);
+
+  // Set visible false.
+  first.SetProperty(Actor::Property::VISIBLE, false);
+
+  // Check that it will fail to set focus on the second actor as it's not focusable
+  DALI_TEST_CHECK(manager.SetCurrentFocusActor(second) == false);
+  DALI_TEST_CHECK(manager.GetCurrentFocusActor() == first);
+
+  // Set visible true.
+  first.SetProperty(Actor::Property::VISIBLE, true);
+
+  // Check that the focus is set on the second actor
+  DALI_TEST_CHECK(manager.SetCurrentFocusActor(second) == true);
+  DALI_TEST_CHECK(manager.GetCurrentFocusActor() == second);
+
+  END_TEST;
+}
+
 int UtcDaliKeyboardFocusManagerFocusFinderRootActor(void)
 {
   ToolkitTestApplication application;
@@ -2437,4 +2480,4 @@ int UtcDaliKeyboardFocusManagerFocusFinderRootActor(void)
   Dali::Toolkit::DevelKeyboardFocusManager::ResetFocusFinderRootActor(manager);
 
   END_TEST;
-}
+}
\ No newline at end of file
index e2e317c..b77b2b8 100644 (file)
@@ -213,13 +213,13 @@ bool KeyboardFocusManager::DoSetCurrentFocusActor(Actor actor)
      actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE) &&
      actor.GetProperty<bool>(Actor::Property::VISIBLE))
   {
-    // If the parent's KEYBOARD_FOCUSABLE_CHILDREN is false, it cannot have focus.
+    // If the parent's KEYBOARD_FOCUSABLE_CHILDREN is false or VISIBLE is false, it cannot have focus.
     Actor parent = actor.GetParent();
     while(parent)
     {
-      if(!parent.GetProperty<bool>(DevelActor::Property::KEYBOARD_FOCUSABLE_CHILDREN))
+      if(!parent.GetProperty<bool>(DevelActor::Property::KEYBOARD_FOCUSABLE_CHILDREN) || !parent.GetProperty<bool>(Actor::Property::VISIBLE))
       {
-        DALI_LOG_INFO(gLogFilter, Debug::General, "[%s:%d] Parent Actor has KEYBOARD_FOCUSABLE_CHILDREN false\n", __FUNCTION__, __LINE__);
+        DALI_LOG_INFO(gLogFilter, Debug::General, "[%s:%d] Parent Actor has KEYBOARD_FOCUSABLE_CHILDREN false or VISIBLE false,\n", __FUNCTION__, __LINE__);
         return false;
       }
       parent = parent.GetParent();