{\r
// Recursively children\r
const auto childCount = actor.GetChildCount();\r
- for(auto i = 0u; i < childCount; ++i)\r
+ for(auto i = childCount; i > 0u; --i)\r
{\r
- Dali::Actor child = actor.GetChildAt(i);\r
+ Dali::Actor child = actor.GetChildAt(i-1);\r
if(child && child != focusedActor && IsFocusable(child))\r
{\r
Rect<float> candidateRect = DevelActor::CalculateScreenExtents(child);\r
\r
} // unnamed namespace\r
\r
-Actor GetNearestFocusableActor(Actor focusedActor, Toolkit::Control::KeyboardFocus::Direction direction)\r
+Actor GetNearestFocusableActor(Actor rootActor, Actor focusedActor, Toolkit::Control::KeyboardFocus::Direction direction)\r
{\r
Actor nearestActor;\r
- if(!focusedActor)\r
+ if(!focusedActor || !rootActor)\r
{\r
return nearestActor;\r
}\r
ConvertCoordinate(bestCandidateRect);\r
\r
ConvertCoordinate(focusedRect);\r
-\r
- Integration::SceneHolder window = Integration::SceneHolder::Get(focusedActor);\r
- if(window)\r
- {\r
- Actor rootActor = window.GetRootLayer();\r
- nearestActor = FindNextFocus(rootActor, focusedActor, focusedRect, bestCandidateRect, direction);\r
- }\r
+ nearestActor = FindNextFocus(rootActor, focusedActor, focusedRect, bestCandidateRect, direction);\r
return nearestActor;\r
}\r
\r
{\r
namespace FocusFinder\r
{\r
+\r
/**\r
* Get the nearest focusable actor.\r
+ * @param [in] rootActor The root actor.\r
* @param [in] focusedActor The current focused actor.\r
* @param [in] direction The direction.\r
* @return The nearest focusable actor, or an empty handle if none exists.\r
*/\r
-DALI_TOOLKIT_API Actor GetNearestFocusableActor(Actor focusedActor, Toolkit::Control::KeyboardFocus::Direction direction);\r
+DALI_TOOLKIT_API Actor GetNearestFocusableActor(Actor rootActor, Actor focusedActor, Toolkit::Control::KeyboardFocus::Direction direction);\r
\r
} // namespace FocusFinder\r
\r
else if(mEnableDefaultAlgorithm)
{
// We should find it among the actors nearby.
- nextFocusableActor = Toolkit::FocusFinder::GetNearestFocusableActor(currentFocusActor, direction);
+ Integration::SceneHolder window = Integration::SceneHolder::Get(currentFocusActor);
+ if(window)
+ {
+ nextFocusableActor = Toolkit::FocusFinder::GetNearestFocusableActor(window.GetRootLayer(), currentFocusActor, direction);
+ }
}
}