I’ve been having an issue changing focus from a RowList component to the HomeScene object that the RowList component is indirectly a part of. An abbreviated version of the component hierarchy:
<component name="HomeScene" extends="Scene"...
<children>
<Rectangle>
<Channels Grid />
Where Channels Grid derives from RowList:
<component name="ChannelsGrid" extends="RowList"...
In the init() for my HomeScene, I set the focus to the scene and everything was fine:
m.top.setFocus(true)
I have an onKeyEvent handler in the HomeScene which successfully sets focus to the ChannelsGrid when the down button is pressed:
function onKeyEvent(key as String, press as Boolean) as Boolean
handled = false
if press then
if m.top.hasFocus()
if key = "left" OR key = "right"
<do_stuff>
else if key = "down"
m.channelsGrid.setFocus(true)
handled = true
end if
else if m.channelsGrid.hasFocus()
if key = "back"
m.channelsGrid.setFocus(false) 'Line that solved the problem
m.top.setFocus(true)
handled = true
end if
end if
end if
return handled
end function
So the code reads:
- Handle “left” and “right” from HomeScene.
- If “down” is pressed, move focus to the ChannelsGrid (RowList)
- If “back” is pressed while focus is on the ChannelsGrid, set focus back to the HomeScene.
This never transferred focus back to the HomeScene. I would even test the focus value in back to back lines:
? m.top.setFocus(true)
? m.top.hasFocus()
And it would print out:
true
false
I then manually set focus to false for the HomeScene and it started to work as desired:
m.channelsGrid.setFocus(false)
m.top.setFocus(true)
But I read in the docs that you should never do this. I don’t want to just take the win and move forward because there’s something that I don’t understand about how focus works. Some clarification would be greatly appreciated.
