You need to decide whether you want things controlled by events, or by loop polling.
Some things to consider:
Inside each event you have a loop where you read the booleans the events react to. That means the events will be fired over and over again inside the loop, and you'll have a stack of old events to be fired when the while loop has exited...events you don't really want to do anything about (use events for all the button clicks, or loops - not a mix).
Events are still flow controlled so when the left event fires and it enters the while loop it won't handle any other events until that while loop has finished.
When an event fires the button value if read at the same time is not the value the event fired on. So when you have an event that fires when
you press the button, if you wire the button value to something inside that even it won't be true, it will be false. Use the new value output of the event case to read the value you really want.