- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Returning focus to a custom component
So I have a custom component with some other components inside it, simplistic example (real life is complicated):
<component name="TopMenu" extends="Group" initialFocus="foo1">
<children>
<LayoutGroup>
<Button id="foo1" text="Hello" />
<Button id="foo2" text="World" />
</LayoutGroup>
</children>
</component>
InitialFocus works fine when the app starts up, then upon user interaction the scene transfers focus to another component (e.g. a MarkupGrid).
Later, in the scene code, I try to transfer focus back to my component, e.g.
topMenu.setFocus(true)
...but this doesn't do anything automatically (i.e. re-trigger initialFocus) and I can't find anything built-in to observe which would allow me to react in the component code.
This (reaching in and focusing the LayoutGroup directly, not nice but worth trying in case there's some special magic) doesn't do anything either
topMenu.getChild(0).setFocus(true)
This (directly setting focus on the first button) does work
topMenu.getChild(0).getChild(0).setFocus(true)
...so obviously I could observe a new "hasCustomFocus" interface on my component, then make sure I use that instead of setFocus, and react to changes to refocus the previously focused button (which I'd have to keep track of myself). Surely I'd be clumsily duplicating functionality that's already built-in though, and future code maintainers will realise I'm an idiot.
What's the right thing to do here? Thanks in advance!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Re: Returning focus to a custom component
Thank you so much i was stuck on this!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Re: Returning focus to a custom component
Oh, hilarious.. I saw this thread in the list and thought somebody had nicked my name. But it's my old account, from back when I didn't know anything!
So, I eventually progressed beyond the custom focus setter but I'm not sure the current approach is cleaner. As you can see, nobody contributed a good answer. 🙂
I ended up with a pretty messy solution involving observing 'focusedChild', and making use of .isInFocusChain(). I seem to recall you get a 'focusedChild' event in a component when you .setFocus() it, and then you can do a setFocus on the child component you want to actually be selected.
I'm afraid I abstracted it all away into code I no longer totally understand, but you at least have two avenues to investigate now.