Even for a quick press/unpress of a direction key, if the processing of the key-press event takes too long, the key can get stuck in repeating mode.
Consider a key press followed quickly by an unpress. If the processing of the key-press event by
handle_ml_menu_keys takes too long, the key-unpress event will be backlogged in the event queue. During this time,
menu_task continues to decrement and may produce a key-repeat event when the handling of the key-press event is done (and sets
keyrep_ack to 1), but before the key-unpress event is actually handled. If that happens, after the key-unpress event is handled, it is followed by a key-repeat event that is "false": the direction key isn't actually being pressed anymore. This key-repeat event is interpreted as if the user has pressed the key again, and since there's no matching key-unpress event, the key then will get stuck in repeating mode.
press event -> (processing time exceeds countdown time) -> unpress event -> false press event -> (another countdown) -> repeating press events
This is "easiest" to trigger by using the right direction to enter a directory in the File Manager module that takes a while to build because of the number of files. If the false press event is created, it quickly start diving deeper into the file structure until it toggles repeatedly between the deepest file list and the file menu for the first file in that list. It can be knocked out of the stuck repeat by hitting any direction key. A workaround is to use the SET key instead to enter directories, as that key does not generate keyrepeat events.