It appears that PRESSED and RELEASED events are unbalanced for input actions with multiple trigger buttons

I have a VR game where I want the player to use either trigger to activate a specific grip function. I’m referring to the Oculus controller, with the GRIP1 and GRIP2 inputs. From what I can tell this bug is NOT specific to the Oculus, but lies within the UE4 input system logic.

I have both GRIP1 and GRIP2 ‘keys’ bound to a HOLD input action. If I press grip1, then press grip2, then release grip1, then release grip2, I get unbalanced input events. Pressing grip1 triggers the PRESSED even. Then pressing grip2 does NOTHING. Releasing grip1 triggers a RELEASED event. At this point the player is left holding the grip2 button, but the game isn’t aware of this, having received exactly one PRESSED and one RELEASED. If the player then releases grip2, ANOTHER RELEASED event is generated, despite no matching PRESSED event.

This is an extremely inconsistent implementation, which makes it impossible to implement the grip action allowing either button to be used interchangeably (the player ends up holding a button with no effect).

This seems to be contrary to the design of the input system. And certainly allowing unbalanced events like this is contrary to any reasonably designed event system.

Yes, there are a few ways I can work around this by NOT using the input event system as designed, but these methods are complicated by the fact that I’m supporting many other types of hardware. The ability to map multiple keys to a single input action is fundamental to most games, and it is reasonable to expect this very simple example to work.

I just want to add – I think it would be reasonable to fix this so that PRESSED and RELEASED are triggered either once each (for the FIRST press and the LAST release) OR so that PRESSED and RELEASED are each triggered twice (once for each ‘key’). Either way would allow me to implement the input handler properly. It is only this unbalanced, inconsistent implementation that prevents the setup from working.