Does anyone know of a way, where I don't have to?
There is no way! Take a look at Godot's source code. It explicitly checks for just_pressed
there, meaning it will only fire once (on the first frame the button is pressed) and not again (when the button is hold down).
To make it work nonetheless, add this script to each of your buttons:
extends Button
func _gui_input(event):
if has_focus() and event is InputEventKey:
if event.is_action_pressed("ui_up", true):
accept_event() # prevent the normal focus-stuff from happening
get_node(focus_neighbour_top).grab_focus()
elif event.is_action_pressed("ui_down", true):
accept_event() # prevent the normal focus-stuff from happening
get_node(focus_neighbour_bottom).grab_focus()
Make sure the focus_neighbour_bottom|top
-properties are set correctly on each button. I just did it for the "uiup"-actions and "uidown"-actions, but the principle should be clear and expanding this on your own shouldn't be too hard.