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.
...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
This (directly setting focus on the first button) does work
...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!
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.