In a menu with a lot of elements and elements managers you’ll need to focus only the current active element desired by the user, to do it you need to use an Input Focus system that I call Listening.
The algorithm of this system is inside WBP_GenericInputHandler, so any widget that inherit from this class will inherit that logic too.
Main Receiver
In this post I explain how to spawn a widget and how to assign user inputs to it, from that moment it will be the only widget that will receive user inputs, I call it Main Receiver, anything else that want to be update about user inputs will be a Listener of the Main Receiver.

For example a button (Listener) inside a menu (Main Listener) to receive updates about user inputs need to be registered as a Listener.
Listener
A Listener is any element or elements manager that want to be updated about user inputs.
Element Managers which contains other elements will automatically update the active element when they receive an update, for example if you have a list of spinboxes inside a menu, the list is a Listener of the menu, when you select a spinbox inside a list it will automatically become a Listener of the list (so a Listener of a Listener works too), so we’ll have that when a user input is detected by the Player Controller it will be sent to the Main Receiver (which is our menu) which will send it to the List (which is a Listener of the Menu) which will send it to the current selected spinbox (which is a Listener of the list).
There is not an end on the layer of depth that you can have of Listeners, to control them you can use this three simple nodes.

Register Listener
From a widget of type WBP_GenericInputHandler (or any widget that inherit from it) you can call RegisterInputListener() which takes a reference to a widget of the same type as parameter. From the moment it is registered, it will receive all the inputs that the first one receive.
By default you can have multiple listeners to a single widget, but you can easly register a single widget and remove all the others by simply checking the parameter IsExclusiveListener.

Unregister Listener
After registering a listener you can unregister it when necessary by simply calling UnregisterListener() and passing the listener to unregister by parameter. After you Unregister a Listener it will not be able to receive user inputs updates.

Unregister All Listeners
If you want to unregister all the listener of a widget just call UnregisterAllListeners(), this function does not work globally, it refer to the listeners of a single widget.
This function will be automatically be called when you check the IsExclusiveListener parameter in the RegisterListener() function.
