Widget navigation, arrow keys skip widgets?? [43KB project included]

I need to share my headache with someone. It’s bad.
I have a very basic hierarchy of widgets, let’s say a single panel with userwidgets on them:

Vertical Box [
  UserWidget type B
  UserWidget type A
  UserWidget type A
  UserWidget type B
  UserWidget type A
]

Type A is visible and focusable, it contains nothing else that is focusable.

Type B is visible, not focusable and contains the engine’s default button widget which is visible and focusable.

I run the project, focus the first widget of type B. If I navigate down using the arrow key it skips all of the type A widgets to the next B widget. If I had navigate down using the tab key, it works as expected. I have found so many things wrong with the navigation system:

Widget navigation (arrow keys) unreliable? - #15 by Roy_Wierer.Seda145

but I just can’t figure this out. This is default behavior. What is going on?

Here’s a clean project to reproduce it. I don’t get it how this is the out of the box behavior. UE 5.1.1
TestSlateNavigation.zip (43.0 KB)

I’ve had enough problems with unreals default widget navigation (both vanilla and commonUI) that I gave up and just rolled my own custom widget blueprints which just filter through an array from input events.

It wasn’t much work to setup, it is slightly less flexible, but its completely bombproof.

Sorry, not much help, but in facing similar issues I decided it just wasnt worth the time to try and understand complicated code over my skill level and just build something that I know will work 100% of the time.

Oddly if you set the Visibility property of type A to “Visible” instead of “self hit test invisible” the arrow navigation start working as well. It starts failing again on other conditions I am not yet sure of, because the tested widget tree copied over to another base class starts failing. The only thing that class modifies on the widget tree is that it enables / disables an inner button (which is unfocusable in the first place) and that it sets the text of a text widget. Makes no sense. I was also unaware the Visibility property had any other purpose than to detect cursor clicks. I’m 95% of finishing a lightweight framework that unfcks the Slate + UMG blend but small things like this remain. It does more than CommonUI in 5% the code size :') so when it’s done I’ll make it available.

This was the issue… Visibility of a UserWidget must be set to “Visible” instead of NotHitTestable if you want to focus it by using Slate navigation arrow keys. What documentation?