Forum Discussion

fyvekatz's avatar
fyvekatz
Newbie
4 years ago

Moving focus from a child to a parent

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.

2 Replies